java如何匹配一个有一个句子的字符串的令牌,这样它就不会考虑开始时的空间。
YES leading spaces are valid, problemsetters are evillllll
是我的输入,预期输出为:
8
YES
leading
spaces
are
valid
problemsetters
are
evillllll
{-truncated-}
以下是我的节目:
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
String array[] = new String[25];
array = s.split("[^a-zA-Z]+");
System.out.println(array.length);
for (String temp: array)
{
System.out.println(temp);
}
scan.close();
}
}
我在控制台上收到的输出是:
9
YES
leading
spaces
are
valid
problemsetters
are
evillllll
这里的错误是数组的第一个元素占用了一个空间,这导致令牌的数量等于9而不是8。情况一定不是这样。对于一些不以空格开头的字符串,上面的代码工作得非常好
任何帮助我获得第一个空间的想法都会有帮助
# 1 楼答案
从Java 9开始,您可以使用^{} 方法,该方法返回一个
Stream<String>
,它只包含标记,因此忽略所有空格:此代码生成预期的输出。唯一需要注意的是使用空格和逗号作为分隔符
# 2 楼答案
在分开之前先把绳子剪短
修剪
问题不在于
trim
不知何故,正则表达式正在将空字符串拆分为大小为1
的字符串[]案例1:
案例2:
对空字符串或空白字符串的修剪操作始终返回空字符串
案例3:
避免这种情况