3
String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04|2013-08-08 12:58:08|ANSWER";

を使用して文字列を分割したい|.Iはjava.Whenで上記の文字列を持っています

System.out.println(text.split("|").length);

結果は 82 です。ここで間違っている可能性があります。

4

6 に答える 6

13

String#splitは、引数として正規表現を使用します。パイプ文字|には特別な意味 (OR を意味する) があり、文字列がリテラルごとに内部で分割されるのを防ぎ|ます。

エスケープする必要があります

text.split("\\|").length

それ以外の場合は、長さを決定するときに完全Stringが使用されます

于 2013-08-16T13:33:44.380 に答える
8

String.split(String)正規表現を使用し、正規表現|内で特別な意味を持ちます。

オプション:

  • |手動でエスケープします。text.split("\\|")
  • プログラムでエスケープし|ます。text.split(Pattern.quote("|"))
  • 代わりにGuavaSplitterクラスを使用して、正規表現をまったく使用しないようにします

個人的には、後者のアプローチを採用します。これは実際には、String.split正規表現をまったく使用する設計上の欠陥であり、コードの呼び出しが不明確であると思います。

本当にを使用したい場合は、コードを読んでいる人に、なぜそれをエスケープしているのかを明確にするためにString.split必ず使用します.Pattern.quote"\\|"

于 2013-08-16T13:37:01.627 に答える
2

エスケープ文字を忘れた、

text.split("\\\|");
于 2013-08-16T13:35:26.083 に答える
1

\\あなたはこれを忘れたはずです。

text.split("\\|")
于 2013-08-16T13:37:09.483 に答える
1
public class Sstring {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04 |2013-08-08 12:58:08|ANSWER";
        System.out.println(text.split("\\|").length);
        String str[] = text.split("\\|");

        for(String i:str){
            System.out.println(i);
        }
    }

}
于 2013-08-16T13:46:47.997 に答える