为什么在Java代码的String.length中不计算空间?

时间:2018-11-16 06:23:56

标签: java string replaceall

我很困惑一个简单的问题。当我在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","");

不起作用! 有人可以帮我吗?

5 个答案:

答案 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");