130

我有一个编程任务,其中一部分要求我编写代码,从用户那里读取一行并删除该行中的所有空白。该行可以包含一个或多个单词。

我试图用这个程序做的是让它分析每个字符,直到找到一个空格,然后将该子字符串保存为第一个标记。然后再次循环,直到它不再到达标记或行尾。

当我尝试编译它时,我不断得到它:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index   out of range: 1
    at java.lang.String.charAt(String.java:694)
    at trim.main(trim.java:23)

这是代码

import java.util.Scanner ;
import java.lang.Character;
import java.lang.String ;
public class trim
{
        public static void main (String[]args)
        {

        String a  ;
        String b  ;
        String c ;
        char aChar ;
        int i = 0 ;

        Scanner scan = new Scanner(System.in);

        a = scan.nextLine();
        a =a.trim() ;


         for ( ; i >= 0 ; i++ )
         {
           aChar = a.charAt(i) ;
           if (aChar != 32)
           {
            a = a.substring(0,i+1);
           }
           else
           {
            b = a.substring(i,160) ;
            b= b.trim();
            c = c + a ;
            c = c.trim() ;
            a = b ;
            i = 0 ;
           }
           if (b.equals(null))
           {
            i = -1 ;
           }
         }
        }
}

更简单的方法值得赞赏,但我仍然想让这个程序正常工作。

而且我不能在输入中使用哨兵。


谢谢大家的帮助,

我将使用更简单的方法,并阅读 javadoc。

4

14 回答 14

232

java.lang.String类有方法substringnot substr,那是你程序中的错误。

此外,如果您可以使用正则表达式,您可以在一行中执行此操作。

a.replaceAll("\\s+","");
于 2013-03-26T09:19:37.807 回答
74

为什么不为此使用正则表达式?

a = a.replaceAll("\\s","");

在正则表达式的上下文中,\s将删除任何空格字符(包括空格、制表符等)。您需要在 Java 中转义反斜杠,以便正则表达式变为\\s. 此外,由于字符串是不可变的,因此将正则表达式的返回值分配给 a.

于 2013-03-26T09:19:52.040 回答
64

literals不使用or的最直观的方法regular expressions

yourString.replaceAll(" ","");
于 2016-04-06T07:31:48.427 回答
25

用空字符替换字符串中的所有空格。

String lineWithoutSpaces = line.replaceAll("\\s+","");
于 2013-03-26T09:19:50.103 回答
17

Try this:

String str = "Your string with     spaces";
str = str.replace(" " , "");
于 2013-03-26T09:19:06.383 回答
15

Try:

  string output = YourString.replaceAll("\\s","")

s - indicates space character (tab characters etc)

于 2013-03-26T09:19:09.593 回答
10
public static String removeSpace(String s) {
    String withoutspaces = "";
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) != ' ')
            withoutspaces += s.charAt(i);

    }
    return withoutspaces;

}

这是从字符串中删除空格的最简单、最直接的方法。

于 2015-11-12T10:24:47.677 回答
7
package com.infy.test;

import java.util.Scanner ;
import java.lang.String ;

public class Test1 {


    public static void main (String[]args)
    {

        String a  =null;


        Scanner scan = new Scanner(System.in);
        System.out.println("*********White Space Remover Program************\n");
        System.out.println("Enter your string\n");
    a = scan.nextLine();
        System.out.println("Input String is  :\n"+a);


        String b= a.replaceAll("\\s+","");

        System.out.println("\nOutput String is  :\n"+b);


    }
}
于 2013-03-26T09:38:26.630 回答
4

你不能只使用 String.replace(" ", "");

于 2013-03-26T09:20:56.840 回答
3

您可以使用正则表达式删除空格,尝试该片段:

Scanner scan = new Scanner(System.in);
    System.out.println(scan.nextLine().replaceAll(" ", ""));
于 2013-03-26T09:21:29.110 回答
3
String a="string with                multi spaces ";
//or this 
String b= a.replaceAll("\\s+"," ");

String c= a.replace("    "," ").replace("   "," ").replace("  "," ").replace("   "," ").replace("  "," ");

//它适用于任何空格

*不要忘记sting b中的空间

于 2016-02-17T00:55:39.227 回答
2
trim.java:30: cannot find symbol
symbol  : method substr(int,int)
location: class java.lang.String
b = a.substr(i,160) ;

没有像substrString 类那样的方法。

使用 String.substring() 方法。

于 2013-03-26T09:21:55.857 回答
0
boolean flag = true;
while(flag) {
    s = s.replaceAll(" ", "");
    if (!s.contains(" "))
        flag = false;
}
return s;
于 2016-04-06T06:49:21.257 回答
-10
String a="string with                multi spaces ";

String b= a.replace("    "," ").replace("   "," ").replace("  "," ").replace("   "," ").replace("  "," ");

//它适用于任何空格

于 2016-02-16T23:07:47.443 回答