web-dev-qa-db-ja.com

文字列がいくつかのプレフィックスのいずれかで始まるかどうかを確認する方法は?

次のifステートメントがあります。

String newStr4 = strr.split("2012")[0];
if (newStr4.startsWith("Mon")) {
    str4.add(newStr4);
}

startsWithMonTuesWedsThrusFridayなどを含める必要があります。文字列を使用するときにこれを行う簡単な方法はありますか? ||を試しましたが、うまくいきませんでした。

92
FredBones

あなたはこれを意味しますか:

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)

または、正規表現を使用できます。

if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
157
hmjd

すでに提示されているソリューションに加えて、Apache Commons Langライブラリを使用できます。

if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
  //whatever
}
42
Thomas

誰も言及していません Stream これまでのところ、ここにあります:

if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))
22
dejvuth

簡単な解決策は次のとおりです。

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed"))
// ... you get the idea ...

より洗練されたソリューションは次のとおりです。

List<String> days = Arrays.asList("Sun", "MON", "TUE", "WED", "THU", "FRI", "SAT");
String day = newStr4.substring(0, 3).toUpperCase();
if (days.contains(day)) {
    // ...
}
7
Óscar López

もちろん、この方法で日付を検出した場合、プログラムは英語圏の国でのみ有用であることに注意してください。あなたが考慮することをお勧めします:

Set<String> dayNames = Calendar.getInstance()
 .getDisplayNames(Calendar.DAY_OF_WEEK,
      Calendar.SHORT,
      Locale.getDefault())
 .keySet();

そこから、.startsWithまたは.matches、または他の人が上記で言及した他の方法を使用できます。このようにして、jvmのデフォルトロケールを取得します。より堅牢にするために、常にロケールを渡すことができます(そして、nullの場合はデフォルトでシステムロケールに設定できます)。

3
Matt

リストとstartsWithAny()の使用

解決策の1つは、すべてのプレフィックスをListに入れてからStringUtilsstartsWithAny()メソッドを使用してチェックを行うことです。

List<String> prefixesList = Arrays.asList("Mon", "Tues", "Wed", "Thurs", "Fri");
if(StringUtils.startsWithAny(newStr4, prefixesList.toArray(new String[0])))
{
    // Your code goes here ...
}
1
Loukan ElKadi
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)

||はブール式(trueまたはfalse)でのみ機能するため、各アイテムにstr.startsWith(otherStr)全体を含める必要があります。

正規表現 のように多くのことを確認する必要がある場合、他のオプションもありますが、より遅くなる傾向があり、より複雑な正規表現は一般に読みにくくなります。

曜日名の略語を検出するための正規表現の例は次のとおりです。

if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {
1
Brendan Long

ORを使おうとしたと言ったとき、どのように正確に使用しましたか?あなたの場合、あなたがする必要があるのは次のようなものでしょう:

String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);
0
npinti