我想写一个程序在java中使用正则表达式,从输入中获得2个字符串(第一个比第二个短),然后如果第一个字符串的字符在第二个字符串内具有相同的顺序,但他们不需要彼此相邻(它是***而不是***子字符串),它输出"真",如果不是,它输出"假"这里有一个例子:
实施例1:
输入:
幻象
p***ph***vnb***a***jknzxcvb***n***a***至***波伊***m***
输出:
真
在上面的例子中,很明显我们可以在第二个字符串中看到单词"phantom"(字符的顺序相同)
实施例2:
输入:
苹果
财务司***a***一年***p***预算***l***财务报告***e***
输出:
假的
正如你所看到的,apple dos在第二个字符串中不存在,我前面提到的条件,所以它输出false
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String word1 = input.next();
String word2 = input.next();
String pattern = "";
int n = word1.length();
char[] word1CharArr = word1.toCharArray();
for ( int i = 0 ; i < n ; i++) {
pattern += "[:alnum:]" +word1CharArr[i]+"[:alnum:]";
// pattern += ".*\\b|\\B" +word1CharArr[i]+"\\b|\\B";
}
pattern = "^" + pattern + "$";
// pattern = "(?s)" + pattern + ".*";
// System.out.println(pattern);
System.out.println(word2.matches(pattern));
}
}
这是我所做的.我打破了我的第一个字符串到它的字符,并希望在每个字符之前和之后使用正则表达式来确定模式.我已经搜索了很多关于正则表达式和如何使用它,但我仍然有问题在这里.我已经评论的部分来自我的搜索之一,但它没有工作,我强调,我想解决它与正则表达式而不是任何其他方式.
1条答案
按热度按时间gblwokeq1#
[:alnum:]
不是一个事物,即使它是,也只匹配 * 一个 * 字符,而不是"从0到无穷多个数字“。您只需要
phantom
和.*
在中间:^.*p.*h.*a.*n.*t.*o.*m.*$' is all you need. After all,
幻影“适合”,所以paahaanaataaoaamaa -应该能完成任务。