如何检查字符串中是否包含“+”字符

42

我想检查我的字符串是否包含一个+字符。我尝试了以下代码

s= "ddjdjdj+kfkfkf";

if(s.contains ("\\+"){
 String parts[] = s.split("\\+);
  s=  parts[0]; // i want to strip part after  +

}

但它没有给出预期的结果。有什么想法吗?


2
请阅读http://tinyurl.com/so-hints - 如果您不说明期望的结果和实际得到的结果,那么说它没有给出预期结果是毫无意义的。 - Jon Skeet
3个回答

96
你需要这个替代:
if(s.contains("+"))

String类的contains()方法不接受正则表达式作为参数,它接受普通文本。


编辑:

String s = "ddjdjdj+kfkfkf";

if(s.contains("+"))
{
    String parts[] = s.split("\\+");
    System.out.print(parts[0]);
}

输出:

ddjdjdj

这并没有获取加号前面的部分,而这似乎是原帖作者真正想要的。 - Jon Skeet
当我发布评论时,你的答案包含对String.contains的调用。 - Jon Skeet
刚刚再看这个问题时,我错过了他已经在调用contains的事实。太早了,呃。但指出代码的其余部分已经没问题会很有用... - Jon Skeet

14

为什么不直接使用以下代码:

int plusIndex = s.indexOf("+");
if (plusIndex != -1) {
    String before = s.substring(0, plusIndex);
    // Use before
}

目前还不清楚您原来的版本为什么不起作用,因为您并没有说明实际发生了什么。如果您想要在不使用正则表达式的情况下将 not 进行拆分,我个人会使用 Guava

Iterable<String> bits = Splitter.on('+').split(s);
String firstPart = Iterables.getFirst(bits, "");
如果您要使用 split(无论是内置版本还是 Guava 版本),则不需要先检查它是否包含 +,如果没有,结果只会有一个。显然,存在效率问题,但代码更简单:
如果您要使用 split(无论是内置版本还是 Guava 版本),则不需要先检查它是否包含+,如果没有,结果只会有一个。显然,存在效率问题,但代码更简单:
// Calling split unconditionally
String[] parts = s.split("\\+");
s = parts[0];
请注意,编写String[] parts优于String parts[]——这是更符合Java惯例的代码。

惊人的解决方案。非常感谢! - Vlad Ivchenko

2

[+]更加简单

    String s = "ddjdjdj+kfkfkf";

    if(s.contains ("+"))
    {
        String parts[] = s.split("[+]");
        s =  parts[0]; // i want to strip part after  +
    }
    System.out.println(s);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接