2012-07-22 4 views
0

저는 Java를 처음 사용하고 Java의 Scanner 클래스에 대한 도움을 찾고 있습니다. 아래는 문제입니다. 여러 줄의 텍스트 파일을 가지고 있고 각 줄마다 여러 쌍의 숫자가 있습니다. 각 쌍의 숫자는 (자릿수, 자릿수)로 표시됩니다. 예 : 3,3 6,4 7,9. 이러한 여러 쌍의 숫자는 모두 공백으로 구분됩니다. 아래는 텍스트 파일의 예입니다. I가 원하는 것은공백 문자와 쉼표가있는 행을 통한 스캐너

1 2,3 3,2 4,5

2 1,3 4,2 6,13

3 1,2 4,2 5,5

나는 각 자릿수를 따로 따로 검색 할 수있다. 그래서 내가 그것을 밖으로 linkedlist의 배열을 만들 수 있습니다. 아래는 내가 지금까지 습득 한 것입니다.

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 
     } 

감사

답변

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과 그룹 2는 각각 각 쌍의 첫 번째와 두 번째 숫자에 해당합니다. 스캐너의

+0

감사합니다. 하지만 위의 해법은 2 1 3 다음 4 4 2 6 형식으로 출력을 제공하고 13을 무시합니다. 원하는 것은 첫 자리 2가 있어야한다는 것입니다. 그런 다음 숫자 1,3,4,2의 쌍이 있고 6,13. 또한 나는 그것을 그룹이 아닌 분리 된 정수의 형태로 갖고 싶다. 왜냐하면 나는 Array [2] [0] = {1,3}, Array [2] [1] = {4,2} 그리고 soo 같은 배열로 줄을 변환하기를 원하기 때문이다. – LivingThing

0

1 사용 nextLine() 방법은 파일의 텍스트의 각 전체 라인을 얻을 수 있습니다.

2 그리고 또한 유연한 여러 줄이 자동으로 등의 쉼표, 공백,

3.BreakIterator을 처리 할 , 개별 문자를 얻기 위해, 정적 방법 getCharacterInstance()BreakIterator 클래스를 사용 방법은 문장을 분리, 자세한 내용 등

말은이를 참조하십시오

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

0

StringTokenizer 클래스를 사용하십시오. 당신이 줄을

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 
} 

희망을 모든 숫자를 원하는 경우

//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," ,"); 

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html

그런 다음 각 숫자는이 같은 nextToken()를 호출 문자열로 읽어,이 도움이!

0

사용 분할 (정규식), 더 간단 :

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 
     }   
} 
관련 문제