如何使用 Scanner 拆分以 space 为分隔符的字符串
How to split a string with space being the delimiter using Scanner
我正在尝试根据单词之间的 space 拆分输入句子。它没有按预期工作。
public static void main(String[] args) {
Scanner scaninput=new Scanner(System.in);
String inputSentence = scaninput.next();
String[] result=inputSentence.split("-");
// for(String iter:result) {
// System.out.println("iter:"+iter);
// }
System.out.println("result.length: "+result.length);
for (int count=0;count<result.length;count++) {
System.out.println("==");
System.out.println(result[count]);
}
}
当我在拆分中使用“-”时,它给出了以下输出:
fsfdsfsd-second-third
result.length: 3
==
fsfdsfsd
==
second
==
third
当我用 space " " 替换 "-" 时,它给出了以下输出。
first second third
result.length: 1
==
first
关于这里的问题有什么建议吗?我已经参考了Whosebug post How to split a String by space,但它不起作用。
使用 split("\s+")
给出此输出:
first second third
result.length: 1
==
first
问题是 scaninput.next()
只会读到第一个空白字符,所以它只会拉入单词 first
。所以split
之后什么也没做。
我建议不要使用 Scanner
,而是使用 java.io.BufferedReader
,这样您就可以 read an entire line at once.
Scanner
的next()
方法已经在空格上分割了字符串,即returns下一个token,字符串直到下一个字符串。因此,如果您添加适当的 println
,您会看到 inputSentence
等于第一个单词,而不是整个字符串。
将scanInput.next()
替换为scanInput.nextLine()
。
使用src.split("\s+");
代替inputSentence.split("-");
它在代表每个 非空白字符 的每个 \s
上拆分。如果元素在该定界符之前、之间和之后,则结果为 array。
下面是您需要的完整示例。
示例:
public class StringSplit {
public static void main(String[] args)
{
String src = "first second third";
String[] stringArray = src.split("\s+");
System.out.println(stringArray[0]);
System.out.println(stringArray[1]);
System.out.println(stringArray[2]);
}
}
有关 split("\s+") 工作原理的更多详细信息,请参阅 blow Whosebug post。
How exactly does String.split() method in Java work when regex is provided?
改变
scanner.next()
到
scanner.nextLine()
来自javadoc
A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.
正在调用 next()
returns 下一个 word。
调用 nextLine()
returns 下 行 。
另一种选择是使用缓冲 Reader class,效果很好。
String inputSentence;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
inputSentence=br.readLine();
String[] result=inputSentence.split("\s+");
rintln("result.length: "+result.length);
for(int count=0;count<result.length;count++)
{
System.out.println("==");
System.out.println(result[count]);
}
}
我正在尝试根据单词之间的 space 拆分输入句子。它没有按预期工作。
public static void main(String[] args) {
Scanner scaninput=new Scanner(System.in);
String inputSentence = scaninput.next();
String[] result=inputSentence.split("-");
// for(String iter:result) {
// System.out.println("iter:"+iter);
// }
System.out.println("result.length: "+result.length);
for (int count=0;count<result.length;count++) {
System.out.println("==");
System.out.println(result[count]);
}
}
当我在拆分中使用“-”时,它给出了以下输出:
fsfdsfsd-second-third
result.length: 3
==
fsfdsfsd
==
second
==
third
当我用 space " " 替换 "-" 时,它给出了以下输出。
first second third
result.length: 1
==
first
关于这里的问题有什么建议吗?我已经参考了Whosebug post How to split a String by space,但它不起作用。
使用 split("\s+")
给出此输出:
first second third
result.length: 1
==
first
问题是 scaninput.next()
只会读到第一个空白字符,所以它只会拉入单词 first
。所以split
之后什么也没做。
我建议不要使用 Scanner
,而是使用 java.io.BufferedReader
,这样您就可以 read an entire line at once.
Scanner
的next()
方法已经在空格上分割了字符串,即returns下一个token,字符串直到下一个字符串。因此,如果您添加适当的 println
,您会看到 inputSentence
等于第一个单词,而不是整个字符串。
将scanInput.next()
替换为scanInput.nextLine()
。
使用src.split("\s+");
代替inputSentence.split("-");
它在代表每个 非空白字符 的每个 \s
上拆分。如果元素在该定界符之前、之间和之后,则结果为 array。
下面是您需要的完整示例。
示例:
public class StringSplit {
public static void main(String[] args)
{
String src = "first second third";
String[] stringArray = src.split("\s+");
System.out.println(stringArray[0]);
System.out.println(stringArray[1]);
System.out.println(stringArray[2]);
}
}
有关 split("\s+") 工作原理的更多详细信息,请参阅 blow Whosebug post。
How exactly does String.split() method in Java work when regex is provided?
改变
scanner.next()
到
scanner.nextLine()
来自javadoc
A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.
正在调用 next()
returns 下一个 word。
调用 nextLine()
returns 下 行 。
另一种选择是使用缓冲 Reader class,效果很好。
String inputSentence;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
inputSentence=br.readLine();
String[] result=inputSentence.split("\s+");
rintln("result.length: "+result.length);
for(int count=0;count<result.length;count++)
{
System.out.println("==");
System.out.println(result[count]);
}
}