我很困惑一个简单的问题。当我在String中使用空格时,String.length方法只计算空格之前的字符串长度,为什么?例如,它返回“ ab cdef”的长度2,而它的长度似乎为7!我想知道带空格的字符串长度, 这是我的简单代码:
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("Please Enter Operation: ");
String value = scanner.next();
System.out.println(valuee.length());
}// psv main
此外,如果我想删除字符串中的空格,
String valuee = value.replaceAll("\\s","");
不起作用! 有人可以帮我吗?
答案 0 :(得分:4)
扫描程序使用定界符模式将其输入分为令牌,默认情况下,该模式与空格匹配。您可以使用useDelimiter
方法更改定界符
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n"); // use new line as delimiter instead of white space
System.out.println("Please Enter Operation: ");
String value = scanner.next();
System.out.println(value.length());
您甚至可以使用nextLine()
作为默认分隔符的新行
答案 1 :(得分:2)
请使用nextLine()而不是next()。 这是代码片段
Scanner scanner = new Scanner(System.in);
String scannedValue = scanner.nextLine();
System.out.println(scannedValue.length());
答案 2 :(得分:1)
next()忽略尾随空格,在nextLine()旁边更改。
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("Please Enter Operation: ");
String value = scanner.nextLine();
System.out.println(valuee.length());
}// psv main
要删除空间,请尝试
String valuee = value.replaceAll(" ","");
答案 3 :(得分:0)
您面临的问题不是String类的length()方法,而是用于读取输入的方法,该方法会在空格之前扫描输入。如果您手动添加空间,它将起作用。如下:
Scanner scanner = new Scanner(System.in);
System.out.println("Please Enter Operation: ");
String value = scanner.next();
value = value + " ";
System.out.println(value.length());
要删除空格,可以使用:
value.replace(" ", "");
答案 4 :(得分:0)
来自文档:
从此扫描器中查找并返回下一个完整令牌。
似乎Scanner.Next
方法认为white space
用于标识令牌。
请参见下面的示例
import java.util.Scanner;
public class Post4 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("Please Enter Operation: ");
String value = scanner.next();
System.out.println(value.length());
value = scanner.next();
System.out.println(value.length());
}// psv main
}
用于以下输入
asd asdf
输出为
3
4
使用Scanner.nextLine();
获取输入并使用
String.replaceAll(" ", "")
替换whitespace
。
看看Scanner
类的构造函数,它使用的是whitespace
public Scanner(InputStream source) {
this(new InputStreamReader(source), WHITESPACE_PATTERN);
}
您可以更改定界符。
scanner.useDelimiter("\n");