2010-09-24 173 views
0

親愛的全部, 我有2個輸入字符串1)stack,over,flow 2)stack/over,flow,com 我想只打印上面2個輸入字符串(沒有特殊字符) 對於第一次輸入我用下面的功能,但對於第二次輸入我不知道如何處理它。請給我解決方案。只打印字符串

st = new StringTokenizer("stack,over,flow", ","); 
     while (st.hasMoreTokens()) 
     { 
      String token = st.nextToken(); 
      System.out.println("token = " + token); 
     } 

輸出:

stack 
over 
flow 
+0

可以格式化代碼,使其可讀?點擊「編輯」並使用頁面右側顯示的格式化提示(點擊「編輯」後) – Nivas 2010-09-24 05:06:57

+0

SOrry我是新來的stackoverflow,這就是爲什麼我發佈這樣。這之後我會正確發佈我的問題。 – Mohan 2010-09-24 05:21:25

回答

0

你能定義你的意思嗎特殊字符?你的意思是「只有字母數字字符」嗎?

如果要刪除所有可能的特殊字符,只留下字母數字字符,那麼你可以使用以下命令:

s = s.replaceAll("[^a-zA-Z0-9]", ""); 

如果你想打印逐一:

s = s.replaceAll("[^a-zA-Z0-9]", "/"); 
String[] splitString = s.split("/"); 
for(String str:splitString) 
{ 
    System.out.println(str); 
} 

EIDT: 既然您問到:上面的代碼使用java 5引入的enhanced for loop(也稱爲for-each循環)。 使用'normal'for循環,這是:

s = s.replaceAll("[^a-zA-Z0-9]", "/"); 
String[] splitString = s.split("/"); 
for(int i=0; i<splitString.length(); i++) 
{ 
    String str = splitString[i]; 
    System.out.println(str); 
} 

另外:

StringTokenizer是傳統類 ,但留作兼容性 原因雖然不鼓勵使用在新代碼 。建議任何尋求此功能的人都使用split方法 或Stringjava.util.regex 包代替。

(從javadoc

+0

你能告訴我什麼是for循環的str值。 – Mohan 2010-09-24 05:38:24

+0

str是循環變量。我提到的代碼使用增強for循環的Java 5.我已編輯答案添加循環'正常' – Nivas 2010-09-24 05:41:00

+0

不能調用數組類型的length()String []我編譯你的編輯代碼時得到這個錯誤。 – Mohan 2010-09-24 05:51:54

0

您需要格式化你的問題比較好,這是很難效仿。但如果我正確地讀它,

st = new StringTokenizer("stack,over,flow", ",/"); 

應該工作得很好。

+0

非常感謝,它效果很好。 – Mohan 2010-09-24 05:19:44

0

這應該在這兩種情況下爲你工作:

String[] strArr=yourString.split("[/,]"); 
    for(String str:strArr) 
    { 
    System.out.println(str); 
    }