文本是否包含子字符串

时间:2016-07-03 12:57:27

标签: java algorithm pattern-matching substring string-matching

如何检查某些String是否包含特定的字符串,如“ABC72961”。所以我们搜索以“ABC”开头的字符串,后跟5位数字。我已经实现了一个算法,但我希望它与“匹配”或其他方式,然后检查这两个解决方案的速度。

6 个答案:

答案 0 :(得分:1)

您可能希望将用于此

^ABC[0-9]{5}$

  • ^:字符串的开头
  • ABC:字面匹配ABC(区分大小写)
  • [0-9]{5}:匹配5到10的数字
  • $:字符串结尾

使用String#matches进行测试

Regex101

实施例

String regex = "^ABC[0-9]{5}$";
String one = "ABC72961";
String two = "ABC2345";
String three = "AB12345";
String four = "ABABABAB";

System.out.println(one.matches(regex));      // true
System.out.println(two.matches(regex));      // false
System.out.println(three.matches(regex));    // false
System.out.println(four.matches(regex));     // false

修改

查看您的评论,您希望它也适用于String one = "textABC72961text"。为了实现这一点,您应该删除限制字符串的^$

.*ABC[0-9]{5}.*

编辑2

如果你想提取它

if (s.matches(".*ABC[0-9]{5}.*")) {
    Matcher m = Pattern.compile("ABC[0-9]{5}").matcher(s);
    m.find();
    result = m.group();
}

答案 1 :(得分:0)

您可以使用String indexOf命令,如下所示:

int result = someString.indexOf("ABC72961")
如果没有匹配,

结果将为-1。

如果匹配,则结果将是匹配开始的索引。

答案 2 :(得分:0)

str.contains("ABC72961");

如果str包含字符串,则返回true。如果没有,则为假。

答案 3 :(得分:0)

我认为你想要使用的是java.util.regex.Pattern

Pattern p = Pattern.compile("ABC(\d*)"); 
Matcher m = p.matcher("ABC72961"); 
boolean b = m.matches();

或者如果它在“ABC”之后正好是5位数,则可以使用正则表达式ABC(\d{5})

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#compile(java.lang.String)

另一种解决方案是:

String stringToTest = "ABC72961"
boolean b = stringToTest.contains("ABC");

http://www.tutorialspoint.com/java/lang/string_contains.htm

答案 4 :(得分:0)

var
EJECT_COM:array [0..5] of Word=($001B,$0000,$0002,$0000,$0000,$0000);
procedure EJECT_CD;
var
i:integer;
x:word;
begin
asm
mov dx,177h
@loop1:
in al,dx
and al,10000000b
jne @loop1
mov dx,177h
@loop2:
in al,dx
and al,01000000b
je @loop2
mov dx,176h
mov al,0A0h
out dx,al
mov dx,3F6h
mov al,00001010b
out dx,al
mov dx,177h
mov al,0a0h
out dx,al
mov cx,0FFFFh
@waitloop:
loopnz @waitloop
mov dx,177h
@loop3:
in al,dx
and al,10000000b
jne @loop3
mov dx,177h
@loop4:
in al,dx
and al,00001000b
je @loop4
end;
for i:=0 to 5 do begin
x:=EJECT_COM[i];
outw($170,x);
inb($376);
end;
inb($376);
asm
mov dx,177h
@loop5:
in al,dx
and al,10000000b
jne @loop5
end;
end;

答案 5 :(得分:0)

这是一个简单的代码,用于检查字符串中是否存在子字符串,而不使用库函数,正则表达式或其他复杂的数据结构。

class SSC {
public static void main(String[] args) {
    String main_str <-- MAIN STRING
    String sub_str <-- SUBSTRING
    String w; int flag=0;
    for(int i=0;i<=main_str.length()-sub_str.length();i++){
        w="";
        for(int j=0;j<sub_str.length();j++){
            w+=main_str.charAt(i+j);
        }
        if(w.equals(sub_str))
        flag++;
    }
    if(flag>0)
    System.out.print("exists "+flag+" times");
    else
    System.out.print("doesn't exist");  
  }
}

希望这有帮助。