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

为什么在java代码中String.length中不计算空间?,java,string,replaceall,Java,String,Replaceall,一个简单的问题把我弄糊涂了。当我在字符串中使用空格时,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.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","");
不行!
有人能帮我吗?

下一步忽略尾随空格,更改为下一行

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(" ","");

您面临的问题不是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(" ", "");

请使用下一行而不是下一行。 这里是代码剪报

Scanner scanner = new Scanner(System.in);
String scannedValue = scanner.nextLine();
System.out.println(scannedValue.length());

扫描器使用定界符模式将其输入拆分为标记,默认情况下,定界符模式匹配空白。可以使用useDelimiter方法更改分隔符

您甚至可以使用nextLine,默认情况下它有一个新行作为分隔符

查找并返回此扫描程序中的下一个完整令牌

下一种方法考虑了标识令牌的空白

参见下面的示例

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

输出是

三,

四,

使用Scanner.nextLine;获取输入并使用

String.replaceAll,以替换空白

看看Scanner类构造函数,它使用的是空格

您可以更改分隔符

scanner.useDelimiter("\n");

您是否在更换前或更换后打印长度?无论在何处使用更换!您应该使用调试器来找出代码中到底发生了什么,以验证您的假设。
public Scanner(InputStream source) {
        this(new InputStreamReader(source), WHITESPACE_PATTERN);
    }
scanner.useDelimiter("\n");