0

次の文字列があります。

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(そのままにしておきます)。また、スペースまたは文字列の末尾が続く場合もあります。

4

5 に答える 5

0

私はそれを逆にします。

if(token.matches("[\\.\\!\\:\\?\\;] "){
token.replace("");
}

ここで、句読点には末尾のスペースがあると想定しています。文の最後の句読点、マークのみが除外されますが、これは個別に削除できます。

于 2013-10-06T12:46:50.620 に答える
0

このようなものがうまくいくかもしれません。それはすべてを除外し、
あなたにとって重要な句読点を取ります。[,.!?]

$1に置き換えるだけ

    # ([^\pL\pN\s]*[\pL\pN](?:[\pL\pN_-]|\pP(?=[\pL\pN\pP_-]))*)|[,.!?]
    # "([^\\pL\\pN\\s]*[\\pL\\pN](?:[\\pL\\pN_-]|\\pP(?=[\\pL\\pN\\pP_-]))*)|[,.!?]"

    (                              # (1 start)
         [^\pL\pN\s]* [\pL\pN] 
         (?:
              [\pL\pN_-] 
           |  \pP 
              (?= [\pL\pN\pP_-] )
         )*
    )                              # (1 end)
 |  
    [,.!?] 
于 2013-10-06T16:10:20.460 に答える
0

使わない理由

string.replaceAll("[?!] ", ""));
于 2013-10-06T12:44:42.250 に答える
0
String input = "Remove from em?ty sentence 1? Remove from sentence 2! But not from ip address 190.168.10.110!";
System.out.println(input.replaceAll("[?!]", ""));

出力を与えました:

Remove from emty sentence 1 Remove from sentence 2 But not from ip address 190.168.10.110
于 2013-10-06T12:38:56.757 に答える