gpt4 book ai didi

java - 输入换行时如何使用分割功能?

转载 作者:行者123 更新时间:2023-12-01 11:04:39 26 4
gpt4 key购买 nike

问题是我们必须拆分字符串并写出我们有多少个单词。

Scanner in = new Scanner(System.in);
String st = in.nextLine();
String[] tokens = st.split("[\\W]+");

当我将输入作为新行并打印编号时。 token 数。我得到的答案是 1。但我希望它是 0。我该怎么办?这里的分隔符都是符号。

最佳答案

简短回答:获取str中的 token (由空格分隔符决定),您可以执行以下操作:

String str = ... //some string
str = str.trim() + " "; //modify the string for the reasons described below
String[] tokens = str.split("\\s+");

更长的答案:

首先,split() 的参数是分隔符 - 在本例中是一个或多个空白字符,即 "\\s+" .

如果您仔细查看 String#split(String, int) 的 Javadoc (这就是 String#split(String) 的意思),你就会明白为什么它会这样。

<小时/>

If the expression does not match any part of the input then the resulting array has just one element, namely this string.

这就是为什么"".split("\\s+")将返回一个包含一个空字符串的数组 [""] ,因此您需要附加空格以避免这种情况。 " ".split("\\s+")根据需要返回一个包含 0 个元素的空数组。

<小时/>

When there is a positive-width match at the beginning of this string then an empty leading substring is included at the beginning of the resulting array.

这就是为什么" a".split("\\s+")将返回["", "a"] ,所以你需要trim()首先删除字符串开头的空格。

<小时/>

If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.

String#split(String)来电 String#split(String, int)limit参数为零,您可以在字符串末尾添加空格而不更改单词数(因为尾随空字符串将被丢弃)。

更新:

如果分隔符是 "\\W+" ,略有不同,因为您不能使用 trim()为此:

String str = ...
str = str.replaceAll("^\\W+", "") + " ";
String[] tokens = str.split("\\W+");

关于java - 输入换行时如何使用分割功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078147/

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