Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查字符串是否包含任何给定的字符序列_Java - Fatal编程技术网

Java 检查字符串是否包含任何给定的字符序列

Java 检查字符串是否包含任何给定的字符序列,java,Java,我有一个字符串数组,我想检查数组的各个子部分是否包含CharSequence中的任何给定字符,而不是所有字符 比如说 CharSequence obj = "12"; //convert section to string String s = Arrays.asList(arr[1]).subList(0,2).toString(); if (s.contains(obj)) { System.out.print("yes"); } 仅当在s中同时找到1和2时,才会打印出yes,但我

我有一个字符串数组,我想检查数组的各个子部分是否包含CharSequence中的任何给定字符,而不是所有字符

比如说

CharSequence obj = "12";
//convert section to string
String s = Arrays.asList(arr[1]).subList(0,2).toString();
if (s.contains(obj))
{
    System.out.print("yes");
}
仅当在
s
中同时找到1和2时,才会打印出
yes
,但我想检查是否有1或2?

CharSequence obj=“12”;
CharSequence obj = "12";
      //convert section to string
      String s = Arrays.asList(arr[1]).subList(0,2).toString();

    for(int i = 0;i<obj.lenth();i++){
      if (s.indexof(obj.charAt(i)) != -1)
        {
            System.out.print("yes");
        }
    }
//将节转换为字符串 字符串s=Arrays.asList(arr[1]).subList(0,2).toString();
对于(int i=0;i使用正则表达式中的字符:

CharSequence obj = "12";
String s = Arrays.asList(arr[1]).subList(0,2).toString();
if (s.matches(".*[" + obj + "].*")) {
    // either "1" or "2" is in s
}

仅供参考,在java中,
matches()
必须匹配整个字符串才能返回
true
-这就是为什么
*
位于正则表达式的两端。

我相信您的问题的解决方案与这里所问的类似:


这个问题提供了一些有趣的解决方案:1)您可以使用indexOf,或者2)您可以测试您要查找的内容不在数组中的条件。

考虑下面显示的方法containsAny

public class InTest {   
    public static boolean containsAny(String strToSearch, CharSequence chars) {
        for (int i=0;i<chars.length(); i++) {
            if (strToSearch.indexOf(chars.charAt(i)) >= 0) {
                return true;
            }
        }
        return false;

    }
    public static void main(String[] args) {
        System.out.println(containsAny(args[0],args[1]));
    }
}
你就不能:

boolean found = false;
for(int i = 0, i < obj.length() && !found; i++)
{
    if(s.contains(obj.subSequence(i, i + 1)))
    {
        found = true;
    }
}
if(found)
{
    System.out.print("yes");
}
boolean-found=false;
对于(int i=0,i
这一点很清楚。很明显,我想避免循环,但无论如何谢谢你好,伙计,是的,我可以做,但是我必须循环并检查很多次,所以我想避免循环。请注意,由于正则表达式中需要解析,因此这很慢。在性能很重要的情况下,您希望使用indexOf@javadba,“性能问题”可以忽略不计(几微秒)。简单、可读、简短的代码比冗长、复杂但快速的代码更可取,除非你能证明有一个性能问题fixing@Bohemian随你便-今年早些时候,我通过更加小心地处理字符串操作项,将一个重要的高容量应用程序的运行时间减少了75%,首先要做的是split()和Pattern等任何需要正式解析器的东西。
boolean found = false;
for(int i = 0, i < obj.length() && !found; i++)
{
    if(s.contains(obj.subSequence(i, i + 1)))
    {
        found = true;
    }
}
if(found)
{
    System.out.print("yes");
}