130

プログラミングの割り当てがあり、その一部で、ユーザーから行を読み取り、その行内のすべての空白を削除するコードを作成する必要があります。行は 1 つ以上の単語で構成できます。

このプログラムで私がやろうとしていたのは、スペースが見つかるまで各文字を分析し、その部分文字列を最初のトークンとして保存することです。その後、トークンがなくなるか行末に到達するまで、再びループします。

コンパイルしようとすると、これを取得し続けます:

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.Stringclass にはメソッドsubstringnotsubstrがあります。これはプログラムのエラーです。

さらに、正規表現を使用できる場合は、これを 1 行で実行できます。

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

これに正規表現を使用しないのはなぜですか?

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

正規表現のコンテキストで\sは、スペース文字 (スペース、タブ文字などを含む) をすべて削除します。正規表現が に変わるように、Java でバックスラッシュをエスケープする必要があります\\s。また、文字列は不変であるため、正規表現の戻り値を に割り当てることが重要です a

于 2013-03-26T09:19:52.040 に答える
25

String 内のすべてのスペースを空の文字に置き換えます。

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

これを試して:

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

試す:

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

s - 空白文字 (タブ文字など) を示します

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

//任意のスペースで正常に機能します

*文字列 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 に答える
-10
String a="string with                multi spaces ";

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

//任意のスペースで正常に機能します

于 2016-02-16T23:07:47.443 に答える