2013-03-12 81 views
4

我願意在Java中從一行讀取序列號的象下面這樣:讀取由逗號和空格分隔的一個行 - java的

1 80,982 163,8164     170,2620  

所以我最終想要的結果陣列[1, 80, 982, 163, 8164, 170, 2620]

我正在考慮使用掃描儀,但不清楚如何以一種整潔的方式實施它,我可以問一些技巧嗎?

感謝您的閱讀!

+1

Stringtokenizer? – VirtualTroll 2013-03-12 03:13:42

+0

@Amine nope,這個類只不過是遺產,而且在新代碼中不鼓勵。 http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html – 2013-03-12 03:19:45

+1

看着你的問題的原始資料,看起來你的行還包含tab(''\ t'')字符。一定要在你的問題中包含這些信息 - 這對你收到的答案的正確性很重要。 – andr 2013-03-12 03:42:30

回答

4

是的掃描儀類適用於此。

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()); 
    } 
} 

如果您正在從文件中讀取,它的工作效果特別好。 (減少了你的工作)

+0

謝謝你的提示! – Bpache 2013-03-12 10:31:11

2

掃描儀正常,只需設置所需的分隔符模式,請參見this

6

如果是我,我會用BufferedReader讀取一行,然後簡單地使用

String[] values = line.split("[, ]"); 

我經常發現Scanner凌亂和矯枉過正。

+0

這不起作用。他的例子可以用「」或「,」來分隔 – 2013-03-12 03:17:14

+1

@AthomSfere:'[]'代表一個字符類,在這種情況下,正則表達式可以被讀作「集合中的一個字符」,「''''' 。因此它應該工作得很好。 – 2013-03-12 03:18:24

+0

我現在看到它。謝謝。 – 2013-03-12 03:21:03

2

試試這個:

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); 
} 
0
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]); 
    } 
2

既然你想要的String []最好的解決辦法是String.split

String[] s = str.split("[ ,]+"); 
2

分裂您的字符串低於正則表達式。

String input = "1 80,982 163,8164     170,2620 "; 
     String[] values = input.split("\\s*(,|\\s)\\s*"); 
     for(String val: values) 
     { 
      System.out.println(val); 

     } 

我符合以下標準。

  1. 零個或多個空白區域(,|\\s)。如果你有更多的一個分隔符,你可以包含在括號內,如(&|,|@|\\s)
  2. 逗號和空格。

檢查小提琴在這裏。

Java program

0

對於一個簡單的輸入文件與一些逗號,空格和逗號用空格,那麼賴斯的正則表達式和葉夫根尼的都與拆分工作。在後一種情況下,+符號很重要。此數據沒有其他選項可用: 1.0 2.0 3.0 4.0 5.0,6.0 7.0 8.0 9.0 10.0,11.0 12.0