2013-08-20 1 views
0

그래서 모든 라인 수를 줄여 더 깨끗하고 읽기 쉽게 텍스트 파일의 형식을 변경하려고합니다. 들어가서 줄의 처음 세 문자를 공백으로 대체하는 간단한 프로그램을 만들었습니다.이 세 문자 공간은 숫자가 될 수있는 곳입니다. 실제 텍스트는 몇 개의 공백이 추가 될 때까지 시작되지 않습니다.이 작업을 수행하고 최종 결과가 출력되면 물음표가있는 다이아몬드가 나오고 이것이 누락 된 문자의 결과라고 가정합니다 . 누락 된 문자 대부분이 아포스트로피 기호 인 것처럼 보입니다. 누군가가 내가 그것을 해결하는 방법을 알려 수 있다면 나는 그것을 정말 감사하겠습니다 :)BufferedReader는 누락 된 문자를 제공합니다.

public class Conversion { 
public static void main(String args[]) throws IOException { 
    BufferedReader scan = null; 
    try { 
     scan = new BufferedReader(new FileReader(new File("C:\\Users\\Nasir\\Desktop\\Beowulftesting.txt"))); 
    } catch (FileNotFoundException e) { 
     System.out.println("failed to read file"); 
    } 

    String finalVersion = ""; 
    String currLine; 
    while((currLine = scan.readLine()) !=null){ 
     if(currLine.length()>3) 
      currLine = " "+ currLine.substring(3); 

     finalVersion+=currLine+"\n"; 
    } 

    scan.close(); 
    System.out.println(finalVersion); 
} 
} 
+0

어떻게보고있는이 텍스트 파일 : 대신, StringBuilder을 사용합니까? – supersam654

+0

입력 파일의 일부분을 분리하여 출력과 함께 게시 할 수 있습니까? –

답변

0
  1. 대신 FileReader를 사용하는 올바른 텍스트 인코딩으로 InputStreamReader를 사용합니다. 잘못된 인코딩으로 파일을 읽으므로 이상한 문자가 나타나는 것 같습니다.
  2. 그런데 루프처럼 문자열에 +=을 사용하지 마십시오.

    StringBuilder finalVersion = new StringBuilder(); 
    String currLine; 
    while ((currLine = scan.readLine()) != null) { 
        if (currLine.length() > 3) { 
         finalVersion.append(" ").append(currLine.substring(3)); 
        } else { 
         finalVersion.append(currLine); 
        } 
        finalVersion.append('\n'); 
    } 
    
+0

문자열에'+ ='를 사용할 수없는 이유는 무엇입니까? 'string + = .....'어쨌든'StringBuilder'에 컴파일됩니다. 비록 당신이 많이 깨끗해 보이기 때문에 나는 당신에게 동의 하겠지만. –

+1

@JoshM 루프에서'string + = ... '을 실행하면 O (n²) 성능이 발생합니다. 반복 할 때마다 새로운 문자열을 만들어야 할 때마다 점점 더 긴 문자열이 복사됩니다. 'StringBuilder'는'toString'을 호출 할 때까지 새로운 문자열을 생성하지 않습니다. –

+0

오, 나는 그것을 고려하지 않았다. 그것에 대해 나에게 계몽을 주셔서 감사합니다. –

관련 문제