我願意在Java中從一行讀取序列號的象下面這樣:讀取由逗號和空格分隔的一個行 - java的
1 80,982 163,8164 170,2620
所以我最終想要的結果陣列[1, 80, 982, 163, 8164, 170, 2620]
我正在考慮使用掃描儀,但不清楚如何以一種整潔的方式實施它,我可以問一些技巧嗎?
感謝您的閱讀!
我願意在Java中從一行讀取序列號的象下面這樣:讀取由逗號和空格分隔的一個行 - java的
1 80,982 163,8164 170,2620
所以我最終想要的結果陣列[1, 80, 982, 163, 8164, 170, 2620]
我正在考慮使用掃描儀,但不清楚如何以一種整潔的方式實施它,我可以問一些技巧嗎?
感謝您的閱讀!
是的掃描儀類適用於此。
public static void main(String[] args) throws Exception {
Scanner s = new Scanner(strOrFile).useDelimiter(",| ");
List<Integer> myList = new ArrayList<Integer>();
while (s.hasNext()) {
myList.add(s.nextInt());
}
}
如果您正在從文件中讀取,它的工作效果特別好。 (減少了你的工作)
謝謝你的提示! – Bpache 2013-03-12 10:31:11
掃描儀正常,只需設置所需的分隔符模式,請參見this。
如果是我,我會用BufferedReader
讀取一行,然後簡單地使用
String[] values = line.split("[, ]");
我經常發現Scanner
凌亂和矯枉過正。
這不起作用。他的例子可以用「」或「,」來分隔 – 2013-03-12 03:17:14
@AthomSfere:'[]'代表一個字符類,在這種情況下,正則表達式可以被讀作「集合中的一個字符」,「''''' 。因此它應該工作得很好。 – 2013-03-12 03:18:24
我現在看到它。謝謝。 – 2013-03-12 03:21:03
試試這個:
public static void main(String[] args) {
String str = "1 80,982 163,8164 170,2620";
String[] s = str.split(" |,");
for(String ss:s)
System.out.println(ss);
}
String ss = "1 80,982 163,8164 170,2620";
ss = ss.replaceAll(" ", ",");
String arr[] = ss.split(",");
for (int i=0;i<arr.length;i++) {
System.out.println("line "+arr[i]);
}
既然你想要的String []最好的解決辦法是String.split
String[] s = str.split("[ ,]+");
分裂您的字符串低於正則表達式。
String input = "1 80,982 163,8164 170,2620 ";
String[] values = input.split("\\s*(,|\\s)\\s*");
for(String val: values)
{
System.out.println(val);
}
我符合以下標準。
(,|\\s)
。如果你有更多的一個分隔符,你可以包含在括號內,如(&|,|@|\\s)
。檢查小提琴在這裏。
對於一個簡單的輸入文件與一些逗號,空格和逗號用空格,那麼賴斯的正則表達式和葉夫根尼的都與拆分工作。在後一種情況下,+符號很重要。此數據沒有其他選項可用: 1.0 2.0 3.0 4.0 5.0,6.0 7.0 8.0 9.0 10.0,11.0 12.0
Stringtokenizer? – VirtualTroll 2013-03-12 03:13:42
@Amine nope,這個類只不過是遺產,而且在新代碼中不鼓勵。 http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html – 2013-03-12 03:19:45
看着你的問題的原始資料,看起來你的行還包含tab(''\ t'')字符。一定要在你的問題中包含這些信息 - 這對你收到的答案的正確性很重要。 – andr 2013-03-12 03:42:30