1

将给定的字符串开始与另一个字符串进行比较的最佳方法是什么

例子 :

  if("ABCD1234".startsWith("ABCD")){
        System.out.println("This is true ");
    }

    if("ABCD1234".substring(0,4).equalsIgnoreCase("ABCD")){
        System.out.println("This also true ");
    }

或者还有其他解决方案吗?

4

8 回答 8

5

我认为这startsWith()是最好的选择,因为它让任何阅读您的代码的人都清楚您的意图。如果您希望它不区分大小写,则在调用该方法之前将两个值转换为相同的大小写。

String prefix = "ABCD";
prefix = prefix.toLowerCase();

if("ABCD1234".toLowerCase().startsWith(prefix)) {
    System.out.println("This is true ");
}

如果您想格外小心,您可能需要传递一个LocaletotoLowerCase()或至少确保在两个字符串上调用它,以确保您的代码通过土耳其测试

于 2012-11-07T10:53:09.573 回答
4

另一种解决方案是:

if (s.indexOf("ABCD") == 0) {
  ...
}

但是,我更喜欢您的首选。

于 2012-11-07T10:50:04.080 回答
1

equalsIgnoreCase在不区分大小写的情况下使用可能会更好,但在子字符串之前,您应该检查长度,它还将在内存字符串池中创建一个新字符串。

喜欢的另一种方式

    if("ABCD1234".substring(0,4).compareTo("ABCD")==0){
        System.out.println("This also true ");
    }
    if("ABCD1234".substring(0,4).compareToIgnoreCase("ABCD")==0){
        System.out.println("This also true ");
    }

但我认为startsWith这里是更好的选择,但要确保区分大小写。

于 2012-11-07T10:51:48.327 回答
1

也可以:

"ABCD1234".matches("ABCD.*");

我脑海中还有许多其他疯狂的解决方案 :) 恕我直言,“最好的”方法是使用您的第一个建议。

于 2012-11-07T10:56:43.197 回答
1

您可以使用来自 Apache Commons 的 StringUtils:

StringUtils.startsWith("abcdef", "abc") = true
StringUtils.startsWith("ABCDEF", "abc") = false
StringUtils.startsWithIgnoreCase("ABCDEF", "abc") = true

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

于 2012-11-07T10:56:54.043 回答
1

老实说,首先你应该问自己“abcd”是否等于“ABCD”?

如果不是,那么我认为第一个解决方案要好得多,它更清洁和可读

如果您的回答是肯定的,那么显然,您不能使用第一个解决方案

于 2012-11-07T10:57:54.320 回答
1

我会更喜欢第二选择:

if("ABCD1234".substring(0,4).equalsIgnoreCase("ABCD")){
        System.out.println("This also true ");

在这种情况下,您还可以通过将字符串转换为小写来进行检查。

if(string.toLowerCase().startswith(string2))
于 2012-11-07T11:45:12.990 回答
0

当我必须为工作编写 Java 应用程序时,我使用startsWith方法。

于 2012-11-07T10:50:53.360 回答