次の文字列があります。
String input = "Remove from em?ty sentence 1? Remove from sentence 2! But not from ip address 190.168.10.110!";
適切な場所で句読点を削除したい。私の出力は次のようにする必要があります。
String str = "Remove from em?ty sentence 1 Remove from sentence 2 But not from ip address 190.168.10.110";
次のコードを使用しています。
while (stream.hasNext()) {
token = stream.next();
char[] tokenArray = token.toCharArray();
token = token.trim();
if(token.matches(".*?[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}[\\.\\?!]+")){
System.out.println("case2");
stream.previous();
int len = token.length()-1;
for(int i = token.length()-1; i>7; i--){
if(tokenArray[i]=='.'||tokenArray[i]=='?'||tokenArray[i]=='!'){
--len;
}
else
break;
}
stream.set(token.substring(0, len+1));
}
else if(token.matches(".*?\\b[a-zA-Z_0-9]+\\b[\\.\\?!]+")){
System.out.println("case1");
stream.previous();
str = token.replaceAll("[\\.\\?!]+", "");
stream.set(str);
System.out.println(stream.next());
}
}
「トークン」は「入力」文字列から送信されています。正規表現またはロジックに関して私が間違っていることを教えてください。
!true
句読点は、それが文を終了する場合に 1 と見なされます。IP アドレス内や,などの単語内には存在しませんemp?ty
(そのままにしておきます)。また、スペースまたは文字列の末尾が続く場合もあります。