我将一个标记定义为一个或多个连续的英文字母。然后,打印令牌的数量,然后在新行上打印每个令牌。字符串''由英文字母,空格和以下任何字符组成:!,?。_'@ 这就是我正在做的事情。
import java.io.*;
import java.util.*;
public class apples {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
scan.close();
String[] splitString = (s.split("[\\s!,?._'@]+"));
System.out.println(splitString.length);
for (String string : splitString) {
System.out.println(string);
}
}
}
当我输入一个以上述任何字符开头的字符串时,我的代码正在对字符进行计数,而在打印时会给出一个空白空间,就像这样。
@dsd sd.sf
4
dsd
sd
sf
我期待的是这个。
@dsd sd.sf
3
dsd
sd
sf
请帮助!!
答案 0 :(得分:2)
第一个分隔符之前没有文本,因此您获得一个空字符串。我建议你忽略第一个空字符串。您也可以在开始时添加分隔符,以便知道有一个可以随时忽略的分隔符。例如
String[] split = ("@"+s).split("\\W+");
int words = split.length - 1;
或者你可以截断前导非字母
String[] split = s.replaceAll("^\\W+", "").split("\\W+");
答案 1 :(得分:0)
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
if (!scan.hasNext())
{
System.out.println(0);
}
else
{
String s = scan.nextLine();
scan.close();
s=s.replaceAll("^\\W+", "");
String[] words = s.split("[\\s',!?._@]+");
int len=words.length;
System.out.println(len);
for(String i:words)
{
System.out.println(i);
}
}
}
}