查找字符串中的字符是否以相同顺序存在于另一个字符串中,或者不使用java中的regex

46qrfjad  于 2023-02-20  发布在  Java
关注(0)|答案(1)|浏览(105)

我想写一个程序在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));
    }
}

这是我所做的.我打破了我的第一个字符串到它的字符,并希望在每个字符之前和之后使用正则表达式来确定模式.我已经搜索了很多关于正则表达式和如何使用它,但我仍然有问题在这里.我已经评论的部分来自我的搜索之一,但它没有工作,我强调,我想解决它与正则表达式而不是任何其他方式.

gblwokeq

gblwokeq1#

[:alnum:]不是一个事物,即使它是,也只匹配 * 一个 * 字符,而不是"从0到无穷多个数字“。
您只需要phantom.*在中间:^.*p.*h.*a.*n.*t.*o.*m.*$' is all you need. After all,幻影“适合”,所以paahaanaataaoaamaa -

String pattern = word1.chars()
  .mapToObj(c -> ".*" + (char) c)
  .collect(Collectors.joining()) + ".*";

应该能完成任务。

相关问题