質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

3回答

2201閲覧

Stringクラスのsplitメソッドの第二引数のマイナス値以外の使い道について

longcat

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/04/21 04:49

知りたいこと

JavaでStringクラスのsplit(String regex, int limit)メソッドの第二引数にマイナス値以外を指定すると有効なケースがあれば知りたいです。

以下のように動作すると理解していますが、実際のところ私は-1以外は使用したことがなく、「マイナス以外の値がどのような場合に有効に使えるのか」という事例が思い浮かびません。

分野によってはマイナス以外もよく使われたりするのでしょうか?
このような処理ではよく使うよ、といった事例があれば教えていただけないでしょうか。

動作の理解

第二引数に指定した値により以下のような動作になるという理解です。

負の値:要素数の制限なく分割され、空文字の要素も残る。
0:要素数の制限なく分割されるが、末尾の空文字の要素は除外される。
正の値:先頭から要素数が指定した数になるまで分割する。

考えたこと

・正の値は、項目数が多いか文字列全体としては長いけど取り出す必要のある項目が先頭からいくつだけ、とあらかじめわかっているとき等かなあ?その場合に全部を分割しないことで処理速度が上がるのがメリットなんだろうか?

・0の場合、末尾だけでなく空文字が全て除去されるなら、使えそうな気がするんだけど…。空文字が末尾のみに出現することがわかっていて、それを取り除きたいケース?…というようなことは結構よくあるのかな?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

例えばJavaの//コメント行を、コードとコメントに分割する、というのはどうでしょうか。

int a = 10; ///////// コメント

極端な例ですが…
つまり、最後の項目に分割文字が入ることが許容されている場合です。

投稿2021/04/27 05:15

pg-tips

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

空文字が末尾のみに出現することがわかっていて、それを取り除きたいケース?

"aaa\nbbb\nccc\n"から、["aaa","bbb","ccc"]を得たいケースとかでしょうか。

末尾に区切り文字を置いても良いケースはよくあるかと思います。
多くの言語での配列リテラルとか(splitの出番ではないですが)。

よく考えたら何項目目までと指定できるケースでも盲目的に-1を指定してしまっていたかも…。

余分な項目数が数千、数万でなければそれで良いかと思います。
ループの中だともっとケチった方が良いと思います。

投稿2021/04/22 07:37

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

longcat

2021/04/23 04:05

回答ありがとうございます。 確かに末尾に区切り文字を置いてもよい仕様というのは プログラムコード内の仕様では結構見かけます。 CSV等、文字列データとして扱う場合に、最後にカンマを付けるというのは 私の周りでは今まであまり見たことが無かったのですが、 データ⇒CSV、CSV⇒データに変換するような場合に、 最後のカンマを許容することにしておけば、 ループで項目を区切り文字で区切って連結した文字列を作成するような処理で、 わざわざ最後の項目だけ区切り文字を入れないための処理を入れるとか しなくてよくなるので、便利そうだと思いました。 実用上は、大量データ処理で速度が求められる、 多重ループの内部で処理される等でなければ -1でも特に問題は無い、とは認識しております。
guest

0

パッと思いつく所だと、
csvで先頭数項目しか使わない場合
電話番号(ハイフン区切り)で市外局番まで欲しい場合
などが想定されます。

投稿2021/04/21 05:09

Luice

総合スコア771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

longcat

2021/04/21 14:36

ありがとうございます。 実際、そのようなケースでは項目数指定する方が当たり前に使われていたりしますかね? 私は-1を指定するのが習慣化してしまっていたので、よく考えたら何項目目までと指定できるケースでも盲目的に-1を指定してしまっていたかも…。 (0を指定する方の使い道はまだよくわかりません。)
Luice

2021/04/21 23:14

使うかどうかは要件次第なので、使う必要があれば使いますし 必要がなければ生涯使わないと思います。
longcat

2021/04/23 03:43

返信ありがとうございます。 念のため補足しておきますと、 >実際、そのようなケースでは項目数指定する方が当たり前に使われていたりしますかね? の質問の意図は、 要件として、「電話番号の市外局番を抽出する」という程度で 決まったもの(特段に処理速度が必要ということも無い)を実装する場合に、 厳密に言ったら-1ではなく1を指定する方がよいのだろうけど、 自分はそこまではせず-1でやってしまっている。 それでも要件は満たせるが、世の中一般的には1を指定する人が多いんだろうか? という程度です。 要件を満たせるのであればどちらでもよいという認識ではあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問