扫描仪通过带有空格和逗号的行

时间:2012-07-22 12:07:44

标签: java java.util.scanner

我是Java的新手,正在寻找Java的Scanner类的帮助。以下是问题所在。 我有一个包含多行的文本文件,每行有多对数字。这样每对数字都表示为(数字,数字)。例如3,3 6,4 7,9。所有这些多对数字通过空格彼此分开。以下是文本文件的示例。

1 2,3 3,2 4,5

2 1,3 4,2 6,13

3 1,2 4,2 5,5

我想要的是我可以单独检索每个数字。这样我就可以创建一个链表的数组了。以下是我到目前为止所实现的目标。

Scanner sc = new Scanner(new File("a.txt"));
    Scanner lineSc;
    String line;
    Integer vertix = 0;
    Integer length = 0;
    sc.useDelimiter("\\n"); // For line feeds

    while (sc.hasNextLine()) {
        line = sc.nextLine();
        lineSc = new Scanner(line);

        lineSc.useDelimiter("\\s"); // For Whitespace
        // What should i do here. How should i scan through considering the whitespace and comma
        }

由于

4 个答案:

答案 0 :(得分:1)

考虑使用正则表达式,并且很容易识别和处理不符合您期望的数据。

CharSequence inputStr = "2 1,3 4,2 6,13";    
String patternStr = "(\\d)\\s+(\\d),";    
// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);

while (matcher.find()) {
    // Get all groups for this match
    for (int i=0; i<=matcher.groupCount(); i++) {
        String groupStr = matcher.group(i);
    }
}

第一组和第二组分别对应于每个配对中的第一个和第二个数字。

答案 1 :(得分:0)

1。使用扫描程序的nextLine()方法从文件中获取每个文本的整行

2。然后使用BreakIterator类及其静态方法getCharacterInstance()来获取单个字符,它将自动处理逗号,空格等。< /强>

3。 BreakIterator还为您提供了许多灵活的方法来分离句子,单词等。

有关详细信息,请参阅:

http://docs.oracle.com/javase/6/docs/api/java/text/BreakIterator.html

答案 2 :(得分:0)

使用StringTokenizer类。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html

//this is in the while loop
//read each line
String line=sc.nextLine();

//create StringTokenizer, parsing with space and comma
StringTokenizer st1 = new StringTokenizer(line," ,");

如果您想要行中的所有数字

,那么当您调用nextToken()时,每个数字都会被读取为字符串
while(st1.hasMoreTokens())
{
    String temp=st1.nextToken();

    //now if you want it as an integer
    int digit=Integer.parseInt(temp);

    //now you have the digit! insert it into the linkedlist or wherever you want
}

希望这有帮助!

答案 3 :(得分:0)

使用split(regex),更简单:

 while (sc.hasNextLine()) {
      final String[] line = sc.nextLine().split(" |,");
      // What should i do here. How should i scan through considering the whitespace and comma
      for(int num : line) { 
            // Do your job
      }        
 }