gpt4 book ai didi

java - 如何用空格拆分字符串并将任何内容单独留在引号内?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:01 25 4
gpt4 key购买 nike

给定一个用户输入的字符串,我试图通过删除任何空格并获取每个标记来拆分字符串。

但是当我在引号中有标记时,我遇到了困难。这里有一些例子可以更好地阐明:

用户输入:很酷

预期输出:

that
is
cool

用户输入:《哈利·波特》这本书很酷

预期输出:

The
book
"Harry Potter"
is
cool

用户输入:这是“最后一个”示例

预期输出:

Here
" is one final "
example

这是我目前所拥有的:

public static void main(String[] args) {
String input;
Scanner in = new Scanner(System.in);
System.out.print("User input: ");
input = in.nextLine();
input = input.trim();
input = input.replaceAll("\\s+", " ");
String[] a = input.split(" ");

for (String c: a) {
System.out.println(c);
}
}

它仅适用于第一个示例,但对于带引号的示例,它会拆分引号标记内的空格。示例 3 输出:

Here
"
is
one
final
"
example

最佳答案

不要专注于您想要拆分 的事情。结果,更容易专注于您想要查找的事物:

private static final Pattern p = Pattern.compile("\"[^\"]+\"|\\S+");
// quotes--- ^^^^^^^^^^
// non+whitespace ^^^^
public static List<String> splitTokensAndQuotes(String text) {
List<String> result = new ArrayList<>();
Matcher m = p.matcher(text);
while (m.find()) {
result.add(m.group());
}
return result;
}

演示:

public static void main(String[] args) {

splitTokensAndQuotes("that is cool")
.forEach(System.out::println);
System.out.println("------");

splitTokensAndQuotes("the book \"Harry Potter\" is cool")
.forEach(System.out::println);
System.out.println("------");

splitTokensAndQuotes("Here \" is one final \" example")
.forEach(System.out::println);
System.out.println("------");

}

结果:

that
is
cool
------
the
book
"Harry Potter"
is
cool
------
Here
" is one final "
example
------

关于java - 如何用空格拆分字符串并将任何内容单独留在引号内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33455149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com