1. ホーム
  2. java

[解決済み] Javaで文字列を分割する方法

2022-03-15 13:43:08

質問

文字列があるのですが、どうすればいいですか? "004-034556" を2つの文字列に分割したい。

string1="004";
string2="034556";

つまり、最初の文字列には、その前の文字である '-' の後の文字が含まれ、2番目の文字列は '-' . また、文字列が '-' が入っています。そうでない場合は、例外を投げることになります。どうしたらいいでしょうか?

どのように解決するのですか?

適切な方法を使用するだけです。 String#split() .

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

なお、これは 正規表現 をエスケープすることを忘れないでください。 特殊文字 が必要です。

そこ は特別な意味を持つ12文字です:バックスラッシュ \ キャレット ^ ドル記号 $ ピリオドまたはドット . 縦棒またはパイプ記号 | クエスチョンマーク ? アスタリスクまたは星 * プラス記号 + 冒頭の括弧 ( 閉じ括弧 ) および開始角括弧 [ 冒頭の中括弧 { これらの特殊文字は、しばしばメタキャラクタと呼ばれます。

つまり、例えばピリオド/ドットで分割したい場合 . というのは、" を意味します。 任意の文字 正規表現では、次のいずれかを使用します。 バックスラッシュ \ のように、個々の特殊文字をエスケープするために split("\\.") を使用するか、または 文字クラス [] のように、リテラルな文字を表現することができます。 split("[.]") を使用するか、または Pattern#quote() のように文字列全体をエスケープします。 split(Pattern.quote(".")) .

String[] parts = string.split(Pattern.quote(".")); // Split on period.

文字列が特定の文字を含むかどうかを事前にテストするには、次のようにします。 String#contains() .

if (string.contains("-")) {
    // Split it.
} else {
    throw new IllegalArgumentException("String " + string + " does not contain -");
}

注意:これは正規表現を取らない。その場合は String#matches() の代わりに

結果のパーツに分割文字を残したい場合は 正引き . 分割された文字を左側に持ってきたい場合は ?<= というグループをパターン上に配置します。

String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556

分割文字が右側に来るようにしたい場合は、正のルックヘッドを使用します。 ?= グループをパターン上に配置します。

String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556

もし、出来上がるパーツの数を制限したいのであれば、その数を split() メソッドを使用します。

String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42