2014-06-06 6 views
1

그래서 내가하려는 것은 8 개의 사전 단어 목록 중 반복없이 하나의 단어 목록을 컴파일하는 것입니다. 일부 사전에는 구두점이있어 단어를 구분합니다. 아래는 문장 부호 제거와 관련된 내용입니다. 나는 스택 코드에서 정규 표현식에 관한 여러 가지 다른 해결책을 시도했다. 물론 코드에서 그대로 두었다. 어떤 이유로 든 그들 중 누구도 소스 사전에서 구두점을 제거하지 못합니다. 누군가 내가 잘못했는지 그리고 아마도 그것을 고치는 법을 말해 줄 수 있습니까? 나는 손실에 처해 있었고 직장 동료가 그것을 확인했는데 그는 이것이 잘 작동해야한다고 말한다.문자열 바꾸기로 Java에서 구두점 제거가 작동하지 않습니다.

int i = 1; 
boolean checker = true; 
Scanner inputWords; 
PrintWriter writer = new PrintWriter(
     "/home/htarbox/Desktop/fullDictionary.txt"); 
String comparison, punctReplacer; 

ArrayList<String> compilation = new ArrayList<String>(); 



while (i <9) 
{ 
inputWords = new Scanner(new File("/home/htarbox/Desktop/"+i+".txt")); 
    while(inputWords.hasNext()) 
    { 
     punctReplacer = inputWords.next(); 
     punctReplacer.replaceAll("[;.:\"()!?\\t\\n]", ""); 
     punctReplacer.replaceAll(",", ""); 
     punctReplacer.replaceAll("\u201C", ""); 
     punctReplacer.replaceAll("\u201D", ""); 
     punctReplacer.replaceAll("’", "'"); 

     System.out.println(punctReplacer); 
     compilation.add(punctReplacer); 
    } 
    } 
inputWords.close(); 
} 
i = 0; 
+3

문자열은 변경 불가능합니다. 사용하는 메소드의 javadoc을 읽으십시오. –

+0

문자열을 변경할 수 없다는 것을 알고 있지만, 이해할 수있는 replace 함수는 전체 문자열을 다시 만들어야합니다. –

+0

다음과 같이하면됩니다 :'punctReplacer = punctReplacer.replaceAll (...);', 함수가 새로운 문자열을 반환하기 때문입니다. – MicSim

답변

5

라인

punctReplacer.replaceAll(",", ""); 

은 (는 무시하고) 교체와 새로운 String을 반환합니다. 가 없으므로 기존의 String을 수정하십시오. 따라서 다음이 필요합니다.

punctReplacer = punctReplacer.replaceAll(",", ""); 

Strings은 변경할 수 없습니다. 일단 당신이 그들을 변경할 수 없습니다 생성, 문자열은 당신이 당신의 변수를 재설정해야 불변으로 어떤 String 조작 방법은 당신에게 새로운 String

+0

Gotcha. 내 오해는 그 방법이 수학 +와 비슷하게 작동한다고 생각하여 자동으로 그 문자열을 새로운 문자열로 대체했지만 나에게 할당하지 않아도되었습니다. 무리 감사! –

4

를 반환합니다

punctReplacer = punctReplacer.replaceAll("[;.:\"()!?\\t\\n]", ""); 

(BTW, 불변 수단을 당신은 할 수 없습니다 일단 값이 변경되면 값을 변경하십시오. 문자열을 사용하려면 변경할 경우 항상 변수를 재설정해야합니다.