-1
System.out.println("neon.mems.cmu.edu/people/".split("/").length); // output is 2

私はいくつかのURL処理を行っていました。驚いたことに、上記の結果が得られました。要素の数は、スプリッターの数に1を足した数である可能性があると思いました。

nullこれまで、最後の空の文字列(または単に)が分割された配列から切り離されていることに気づいていませんでした。これはすべてのプログラミング言語に当てはまるのだろうか。

4

2 に答える 2

5

いいえ、すべてのプログラミング言語に当てはまるわけではなく、普遍的な仕様がないため、そうすべき理由はありません。

行け

a := strings.Split("neon.mems.cmu.edu/people/", "/")
fmt.Println(len(a)) // prints 3

Javascript

ブラウザのコンソールに次のように入力します。

"neon.mems.cmu.edu/people/".split('/')

結果は

["neon.mems.cmu.edu", "people", ""]

一致が空の場合に何をすべきかは、明白なことでも、split概念に固有のものでもありません。その証拠は、古いバージョンの Internet Explorer ではこれらの空の一致が削除されたことです。

于 2013-01-22T08:49:30.297 に答える
1

空の文字列が破棄されるのはなぜですか?

String#split(regx) 実際String#split(regx,0)に実行する内部呼び出し-コードスニペットPattern.compile(regex).split(this, limit);

if (limit == 0)
        while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
            resultSize--;

制限が0の場合、resultSizeから空の文字列が破棄されています。

望ましい結果を得る方法は?

String#split(regx,limit)希望する結果を得るを使用します。

System.out.println("neon.mems.cmu.edu/people/".split("/",3).length);

結果 :

 3

そして言語仕様については@dystroyに同意します

于 2013-01-22T08:56:58.413 に答える