2014-12-18 3 views
0

나는 파일에서 한 줄씩 읽은 다음 그 줄을 arrayList 안에 문자열로 저장하는 질문에 갇혔습니다. 그런 다음이 목록은 "rings ="내가 사용하는 패턴이 다음에 나오는 int를 찾기 위해 순환됩니다. "(? < = rings =) [0-9] {1}"다음 코드로 print 문을 보여줍니다. 나이 int하지만 그것은 결코 그 int를 찾지 못할 방법을 의미하는 데 사용되지 않습니다. 어디에서 int를 가져 오는 지의 예입니다. .*rings=(\\d+).*특정 패턴 다음에 찾을 수있는 파일에서 숫자를 반환

String pattern=".*rings=(\\d+).*"; 
Pattern rinngerPat = Pattern.compile(pattern); 

그런 다음 group(1)

for(String line : fileToArray) { 
    Matcher xTimeSeeker = rinngerPat.matcher(line); 
    if(xTimeSeeker.find()) { 
     xTimesRing = xTimeSeeker.group(1); 
     int xTimeSeekerInt = Integer.parseInt(xTimesRing); 
     System.out.println(xTimeSeekerInt); 
    } 
} 

자체가 포함 된 당신의 자리를 갖게됩니다

//Event=ThermostatDay,time=12000 
//Event=Bell,time=9000,rings=5 
//Event=WaterOn,time=6000 

코드는

for (int i = 0; i < fileToArray.size(); i++) { 

    try { 
     String friskForX = fileToArray.get(i).toString(); 
     Matcher xTimeSeeker = rinngerPat.matcher(friskForX); 
     if (xTimeSeeker.group() != null) { 
      System.out.println("will ring more then once "); 
      xTimesRing = xTimeSeeker.group(); 
      int xTimeSeekerInt = Integer.parseInt(xTimesRing); 
      System.out.println(xTimeSeekerInt); 
     } 
    } 
    //this catches it but does nothing since some files might not have x value. 
    catch (IllegalStateException e) { } 
} 
+0

정규식을 건너 뛰고 각 행을 쉼표로 구문 분석하는 이유는 무엇입니까? –

+0

나는 내가 따라 잡지 않는다고 생각한다. 이 이벤트는 내가 읽을 수없는 파일을 읽는 지침이며 변경이 불가능합니다. –

+0

각 줄은 쉼표로 구분됩니까? 각 행을 쉼표로 분리하십시오. 각 색인을 확인하고'rings ='로 시작하는지 확인하십시오. –

답변

0
가 당신의 패턴을 변경

입니다 예 :

public static void main(String[] args) { 
    List<String> fileToArray = new ArrayList<>(); 
    fileToArray.add("Event=ThermostatDay,time=12000"); 
    fileToArray.add("Event=Bell,time=9000,rings=5"); 
    fileToArray.add("Event=WaterOn,time=6000"); 
    String pattern=".*rings=(\\d+).*"; 
    Pattern rinngerPat = Pattern.compile(pattern); 
    String xTimesRing; 
    for(String line : fileToArray) { 
     Matcher xTimeSeeker = rinngerPat.matcher(line); 
     if(xTimeSeeker.find()) { 
      xTimesRing = xTimeSeeker.group(1); 
      int xTimeSeekerInt = Integer.parseInt(xTimesRing); 
      System.out.println(xTimeSeekerInt); 
     } 
    } 
} 
+0

노력에 감사드립니다. 처음 패턴을 사용했지만 코드에서 아무 것도 반환하지 않았습니다. 그리고 나서 for 루프를 사용할 때, fileToArray가 객체이므로 문자열 라인을 사용할 수 없다는 오류가 발생했습니다. –

+0

내 목록을 정의한 방식으로 인해 for 루프가 작동하지 않는 것 같습니다. 일단 다시 정의하면 작동합니다. 시간과 노력에 감사드립니다. 이제 작동합니다. –

관련 문제