java - 创建仅包含某些字符的 String[]

标签 java regex

我正在尝试创建一个仅包含由某些字符组成的单词的String[]。例如,我有一本包含许多单词的字典,如下所示:

ARM 军队 艺术 作为 在 攻击 试图 注意力 景点 权威 自动的 苏醒 婴儿 后退 坏的 包 余额

我想缩小列表范围,使其仅包含带有字符 abg 的单词。因此,在此示例中,列表应仅包含单词“bag”。 目前我正在尝试使用正则表达式来做到这一点,但之前从未使用过它们,我似乎无法让它工作。 这是我的代码:

public class LetterJugglingMain {
public static void main(String[] args) {
    String dictFile = "/Users/simonrhillary/Desktop/Dictionary(3).txt";
    fileReader fr = new fileReader();
    fr.openFile(dictFile);
    String[] dictionary = fr.fileToArray();
    String regx = "able";
    String[] newDict = createListOfValidWords(dictionary, regx);
    printArray(newDict);
}

public static String[] createListOfValidWords(String[] d, String regex){
    List<String> narrowed = new ArrayList<String>();
    for(int i = 0; i<d.length; i++){
        if(d[i].matches(regex)){
            narrowed.add(d[i]);
            System.out.println("added " + d[i]);
        }
    }
    String[] narrowArray = narrowed.toArray(new String[0]);
    return narrowArray;
}

但是,返回的数组始终为空,除非字符串正则表达式是确切的单词!有任何想法吗?如果需要,我可以发布更多代码...我想我一定是试图错误地初始化正则表达式。 缩小范围的列表必须仅包含正则表达式中的字符。

最佳答案

坦白说,我不是正则表达式方面的专家,但我不认为它是实现您想要的功能的最佳工具。我会使用如下方法:

public boolean containsAll(String s, Set<Character> chars) {
    Set<Character> copy = new HashSet<Character>();
    for (int i = 0; i < s.length() && copy.size() < chars.size(); i++) {
        char c = s.charAt(i);
        if (chars.contains(c)) {
            copy.add(c);
        }
    }
    return copy.size() == chars.size();
}

关于java - 创建仅包含某些字符的 String[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14184978/

相关文章:

mysql - 如何知道 float 中小数点右边的位数?

regex - 如何使用 Excel 公式来验证自定义的电子邮件地址?

python - 从字符串中获取特定信息

java - 为什么当我将国际象棋项目作为可运行的 jar 文件运行时,我会得到一个奇怪的行为,而当我在 eclipse 中运行它时,一切都工作正常?

python - 需要正则表达式的帮助来获取强制值之后的任何内容

java - 如何解决jenkins maven错误 'Could not find main class'?

java - 无法在 Docker 中部署的 Jenkins 中安装插件

.net - 不包含多个特定单词的字符串的正则表达式

java - 如果 react 中包含空格,则无法搜索名称

java - 使用线程在 JavaFX 中移动矩形