2014-10-22 4 views
1

파일을 가져 와서 readFile이라는 문자열로 변환했습니다.자바 문자열에서 단어를 추출하는 방법

qwertyuiop00% 
qwertyuiop 

가 이미 사용 문자열에서 "00"으로 추출한 : 파일은 두 개의 라인을 포함 문자열 readFile.substring 수 = (11, 13);

String e = readFile.substring(16, 19); 
String u = readFile.substring(20, 23); 

및 사용하려고 :

나는 지금 내가 처음과 같은 방법을 사용하려고하면 "QWERTYUIOP" 에서 "ERT"과 "UIO"를 추출과 같이 할 :

System.out.println(e + "and" + u); 

문자열 색인이 범위를 벗어났습니다.

어떻게해야합니까? 문자열에서 추출하고자하는 다음 두 단어가 두 번째 줄에 있기 때문에 그렇습니까? 그렇다면 두 번째 줄만 어떻게 추출합니까? 나는 그것을 기본으로 유지하고 싶다. 고마워.

업데이트 : 파일의 첫 번째 줄만 읽히고있는 것이므로 두 줄을 읽도록 만드는 방법을 알고 있습니까?

+0

'실제로 작동하지 않습니다. '실제로 무슨 일이 일어나고 있습니까? –

+0

왜 부분 문자열에 regexp를 사용하지 않습니까? 아니면 왜 이것을 필요로합니까? 어쩌면 우리가 해결하고자하는 문제를 우리에게 말해 준다면 우리는 당신에게 단순한 해결책을 줄 수 있습니다. – Csanesz

+0

두 번째 줄은 더 짧습니다. 더 많은 부분 문자열을 시도하는 10 자입니다. regexps를 사용할 수 있습니다. – Martin

답변

0

각 문자열의 총 문자 수를 계산하면 입력 한 색인보다 많습니다.

qwertyuiop00 %는 13 자입니다. 문자열에서 .length() 메서드를 호출하여 길이가 예상 한 길이인지 확인하십시오. 내가 전에 다음 사항을 추가로 디버깅 할

:

System.out.println(readFile); 
System.out.println(readFile.length()); 

참고 :

qwertyuiop00% qwertyuiop가 문자로 공간 카운트 이후 24 자입니다. 당연히 당신은 23 자입니다있는 공간이없는 당신의 인덱스는 0

주 2 22 않는 한 : 나는 당신의 뭔가가 일반적인 코드를 사용하여 의심 때문에

내가 파서 코드 요청 like :

while ((line = reader.readLine()) != null) 

이러한 행을 하나의 문자열로 연결해야합니다 (최선의 방법은 아니지만).

은 다음을 참조하십시오 How do I create a Java string from the contents of a file?

+0

qwertyuiop00 % qwertyuiop이 모두 23 자입니까? – ChatNoir

+0

파싱 코드를 제공해 주시겠습니까? 또한 이것이 실제로 변수 내의 값이라는 것을 인쇄 해 줍니까? –

+1

나는 그가 실수를 피하기 위해 길이를 필요로한다고 생각하고 부분 문자열이 존재하는지 테스트 할 수있다 : if (string.contains ("uio")) –

0

먼저 선으로 문자열을 분할, 대신 Files.#readAllLines를 사용하여 직접 List<String>에 당신은 내용을 읽을 할 수 있습니다

String[] lines = readFile.split("[\r\n]+"); 

사용하여이 작업을 수행 할 수 있습니다.

초, 하드 코딩 된 인덱스를 사용하지 말고 String#indexOf을 사용하십시오.원래 문자열에 부분 문자열이 없으면 메서드 retuchler -1, 항상 그 값을 확인하고 반환 값이 -1 (0 이상)이 아닌 경우에만 substring을 호출하십시오.

if(lines.length > 1) { 
    int startIndex = lines[1].indexOf("ert"); 
    if(startIndex != -1) { 
     // do what you want 
    } 
} 

, BTW 문자열

System.out.println(e + "and" + u); 

에서 이미 공지 된 문자열을 추출하는 요점은

System.out.println("ertanduio"); 

고정 스트링의 시작과 끝 위치 만하게 파악하는 것과 거기 없다 예를 들어 부분 문자열을 제거하는 등 원래 문자열의 나머지 부분을 사용하여 작업하려는 경우

+0

readAllLines 또는 http://stackoverflow.com/questions/326390/how-to-create-a-java-string-from-the-contents-of-a-file :) –

0

는이 시도를 제공 할 수 있습니다 : -

Scanner sc=new Scanner(new FileReader(new File(The file path for readFile.txt))); 
String st=""; 
while(sc.hasNext()){ 
st=sc.next(); 
} 
System.out.println(st.substring(2,5)+" "+"and"+" "+st.substring(6,9)); 

체크 아웃 작동합니다.

-2
String s="madam adam ladam"; 
    int l=s.length(); 
    char k; 
    int p=0; 
    String w="",z=" "; 
    for(int i=0;i<l;i++) 
    { 
     k=s.charAt(i); 
     if(Character.isWhitespace(k)==true) 
     { 
      w=s.substring(p,i); 
      p=i+1; 
      System.out.println(w); 
      }} 
     p=lastIndexOf(" "); 
     z=s.substring(p+1); 
     System.out.println(z); 
관련 문제