分开的拆分绳子分开



我需要按在Java中分开的空间拆分单词,因此我使用了.split函数来实现这一目标,如下所示

String keyword = "apple mango ";
String keywords [] = keyword .split(" ");

上面的代码工作正常,但唯一的是我有时我的关键字会包含关键字,例如" jack frual" "冰淇淋" ,带有双引号为如下所示

String keyword = "apple mango "jack fruit" "ice cream"";

在这种情况下,我需要得到4个单词,例如 Apple 芒果 Jack Fruit 冰淇淋在关键字数组

任何人都可以告诉我一些解决方案

List<String> parts = new ArrayList<>();
String keyword = "apple mango "jack fruit" "ice cream"";
// first use a matcher to grab the quoted terms
Pattern p = Pattern.compile(""(.*?)"");      
Matcher m = p.matcher(keyword);
while (m.find()) {
    parts.add(m.group(1));
}
// then remove all quoted terms (quotes included)
keyword = keyword.replaceAll("".*?"", "")
                 .trim();
// finally split the remaining keywords on whitespace
if (keyword.replaceAll("\s", "").length() > 0) {
    Collections.addAll(parts, keyword.split("\s+"));
}
for (String part : parts) {
    System.out.println(part);
}

输出:

jack fruit
ice cream
apple
mango

我会用正则表达式和两个捕获组,每个模式一个。我不知道有其他任何方式。

    String keyword = "apple mango "jack fruit" "ice cream"";
    Pattern p = Pattern.compile(""?(\w+\W+\w+)"|(\w+)");      
    Matcher m = p.matcher(keyword);
    while (m.find()) {
        String word = m.group(1) == null ? m.group(2) : m.group(1);
        System.out.println(word);
    }

此解决方案有效,但我相信这不是最适合性能/资源的方法。当您有两个以上词的水果时,它也有效。随时编辑或优化我的代码。

public static void main(String[] args) {
        String keyword = "apple mango "jack fruit" "ice cream" "one two three"";
        String[] split = custom_split(keyword);
        for (String s : split) {
            System.out.println(s);
        }
    }
    private static String[] custom_split(String keyword) {
        String[] split = keyword.split(" ");
        ArrayList<String> list = new ArrayList<>();
        StringBuilder temp = new StringBuilder();
        boolean multiple = false;
        for (String s : split) {
            if (s.startsWith(""")) {
                multiple = true;
                s = s.replaceAll(""", "");
                temp.append(s);
                continue;
            }
            if (s.endsWith(""")) {
                multiple = false;
                s = s.replaceAll(""", "");
                temp.append(" ").append(s);
                list.add(temp.toString());
                temp = new StringBuilder();
                continue;
            }
            if (multiple) {
                temp.append(" ").append(s);
            } else {
                list.add(s);
            }
        }
        String[] result = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        return result;
    }

您不能用String.split()做到这一点。您需要为目标令牌提出正则表达式,然后通过匹配器收集它们,例如:

    final Pattern token = Pattern.compile( "[^"\s]+|"[^"]*"" );
    List<String> tokens = new ArrayList<>();
    Matcher m = token.matcher( "apple mango "jack fruit" "ice cream"" );
    while( m.find() )
        tokens.add( m.group() );

这将在引号上拆分字符串,然后再按空格将成员分开。

    String keyword = "apple mango "jack fruit" "ice cream"";
    String splitQuotes [] = keyword.split(""");
    List<String> keywords = new ArrayList<>();
    for (int i = 0; i < splitQuotes.length; i++) {
        if (i % 2 == 0) {
            Collections.addAll(keywords, splitQuotes[i].split(" "));
        } else {
            keywords.add(splitQuotes[i]);
        }
    }

相关内容

  • 没有找到相关文章

最新更新