4

Pythonで文字列を分割すると、隣接するスペース区切り文字がマージされます。

>>> str = "hi              there"
>>> str.split()
['hi', 'there']

Javaでは、区切り文字はマージされません。

$ cat Split.java
class Split {
    public static void main(String args[]) {
        String str = "hi              there";
        String result = "";
        for (String tok : str.split(" "))
            result += tok + ",";
        System.out.println(result);
    }
}
$ javac Split.java ; java Split
hi,,,,,,,,,,,,,,there,

JavaでPythonスペース分割セマンティクスを取得する簡単な方法はありますか?

4

5 に答える 5

8

String.split正規表現を受け入れるので、隣接する空白に一致するものを提供します。

str.split("\\s+")

Pythonの正確な動作をエミュレートする場合はstr.split()、次のようにトリミングする必要があります。

str.trim().split("\\s+")

Pythonドキュメントstr.split()からの引用:

sepが指定されていないか、Noneの場合、異なる分割アルゴリズムが適用されます。連続する空白の実行は単一の区切り文字と見なされ、文字列に先頭または末尾の空白がある場合、結果には開始または終了に空の文字列が含まれません。したがって、空の文字列または空白だけで構成される文字列をNone区切り文字で分割すると、[]が返されます。

したがって、上記は空の文字列を返すため、まだ完全に同等ではありませんが、['']おそらくあなたの目的には問題ありません:)

于 2012-04-09T21:15:56.713 に答える
1

str.split("\\s+")代わりに使用してください。これはあなたが必要とすることをします。

于 2012-04-09T21:16:10.797 に答える
1

Javaは正規表現を使用して分割します。

したがって、単一のスペースで分割すると、絶対に多くの配列要素が得られます。

Pythonはsplit、ltrims、rtrimsを実行し、パラメーターが渡されていない場合は、スペースの実行を1つのスペースに取り込みます。

だからそれはより適切になります

"my             string".trim().split("\\s+"); 
于 2012-04-09T21:18:44.350 に答える
1

Niklas B.の答えの問題はtrim、空白の独自の定義、つまり、コードが。までのすべてのものがあること'\u0020'です。空の文字列の修正を含め、以下はPythonバージョンに十分に近づくはずです。

class TestSplit {

    private static final String[] EMPTY = {};

    private static String[] pySplit(String s) {
        s = s.replaceAll("^\\s+", "").replaceAll("\\s+$", "");
        if (s.isEmpty()) return EMPTY;
        return s.split("\\s+");
    }
}
于 2014-09-02T16:43:00.903 に答える
0

Javaでは、String.splitは正規表現を取ります。str.split(" +")したがって、Pythonセマンティクスを取得するために行うことができます。

于 2012-04-09T21:16:10.103 に答える