如何检查字符串是否以多个前缀之一开头?

Fre*_*nes 95 java string if-statement

我有以下if语句:

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

我希望它包含startsWith Mon Tues Weds Thurs Friday等.使用字符串时有一个简单的方法吗?我试过||但它没用.

hmj*_*mjd 163

你的意思是这样的:

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用正则表达式:

if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))
Run Code Online (Sandbox Code Playgroud)

  • @TheCrazyProgrammer当然有; 通过正则表达式进行匹配比原始字符串方法调用要昂贵得多.我无法给出的确切数字,但这是普遍的共识. (4认同)
  • 您建议的两种方法有任何性能差异吗? (2认同)

Tho*_*mas 44

除了已经提供的解决方案,您还可以使用Apache Commons Lang库:

if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
  //whatever
}
Run Code Online (Sandbox Code Playgroud)


dej*_*uth 25

Stream到目前为止没有人提到过,所以这里是:

if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))
Run Code Online (Sandbox Code Playgroud)

  • 伟大的(和最新的)答案...顺便说一句 - > newStr4.startsWith(s)`可以被`newStr7 :: startsWith`取代更清晰 (5认同)

Ósc*_*pez 7

一个简单的解决方案是

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed"))
// ... you get the idea ...
Run Code Online (Sandbox Code Playgroud)

一个更好的解决方案是:

List<String> days = Arrays.asList("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT");
String day = newStr4.substring(0, 3).toUpperCase();
if (days.contains(day)) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 或[Arrays.binarySearch()](http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#binarySearch%28java.lang.Object [],%20java.lang.对象%29)如果它们的搜索列表已排序:D (3认同)
  • @BrendanLong 对于这么短的列表来说有点矫枉过正,但还可以:) (2认同)

小智 5

这样就更简单更整洁了:

let newStr4 = strr.split("2012")[0];
if (['Mon', 'Tues', 'Weds', 'Thurs', 'Friday'].some(word => newStr4.startsWith(word))) {
    str4.add(newStr4);
}
Run Code Online (Sandbox Code Playgroud)