如何解决如何检查一个字符串是否具有相同顺序的相同字符,但其他字符串在 Java 中是否有多余字符
所以基本上我必须检查另一个字符串是否具有相同顺序的相同字符。
因此,如果血液中的字母与冠状病毒的顺序相同,就像第二个一样,我必须打印为阳性。如何在 Java 中做到这一点?提前致谢。
解决方法
您可能希望使用 String#indexOf() 方法和布尔标志,例如:
String mainString = "caronavirus";
String[] stringsToCompare = {"abcde","crnas","aovrs","onarous"};
System.out.println("INPUT\n=====");
System.out.println(mainString);
System.out.println(stringsToCompare.length);
for (String wStrg : stringsToCompare) {
System.out.println(wStrg);
}
System.out.println();
System.out.println();
System.out.println("OUTPUT\n======");
System.out.println(mainString);
System.out.println(stringsToCompare .length);
for (String wStrg : stringsToCompare) {
int idx = 0;
boolean isNegative = false;
for (int i = 0; i < wStrg.length(); i++) {
String ch = wStrg.substring(i,i + 1);
if (mainString.indexOf(ch,idx) >= idx) {
idx = mainString.indexOf(ch,idx);
}
else {
System.out.println("NEGATIVE");
isNegative = true;
break;
}
}
if (!isNegative) {
System.out.println("POSITIVE");
}
}
控制台窗口显示应该类似于:
INPUT
=====
caronavirus
4
abcde
crnas
aovrs
onarous
OUTPUT
======
NEGATIVE
POSITIVE
POSITIVE
NEGATIVE
,
您可以从要针对主字符串测试的每个字符串中创建一个正则表达式。例如,crnas
应该转换为 .*c.*r.*n.*a.*s.*
,然后您可以将其与返回布尔值的 String.matches
方法一起使用。例如,coronavirus.matches(".*c.*r.*n.*a.*s.*")
将返回 true。给你一个起点:
import java.util.Arrays;
import java.util.stream.Collectors;
public class Example {
public static void main(String[] args) throws Exception {
String mainString = "coronavirus";
String[] testStrings = {"abcde","onarous"};
for(String test : testStrings){
System.out.println(test + " : " + (mainString.matches(toRegex(test)) ? "POSITIVE" : "NEGATIVE"));
}
}
static String toRegex(String input){
return Arrays.stream(input.split(""))
.collect(Collectors.joining(".*",".*",".*"));
}
}
输出:
abcde : NEGATIVE
crnas : POSITIVE
onarous : NEGATIVE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。