1

指定された文字列から先頭と末尾のスペースを削除し、連続するスペースを結合する必要があります。例えば、

String str = "    this is    a   string  containing numerous  whitespaces   ";

そして、私はそれを次のように返す必要があります:

"this is a string containing numerous whitespaces";

でも使えないのが難点String#trim()。(これは宿題であり、そのような方法を使用することは許可されていません。)現在、各文字に1つずつアクセスして試していますが、まったくうまくいきません。

これには最適化されたコードが必要です。誰か助けてくれませんか?私はそれを今日までに終わらせる必要があります:(

4

8 に答える 8

5

編集:使用できないと言われる前に回答が投稿されreplaceAllました。OPには役に立たなくても、他の読者には役立つかもしれないという理由で、ここに残しています。

これには最適化されたコードが必要です。

本当に最適化する必要がありますか?これをボトルネックとして特定しましたか?

これはそれを行う必要があります:

str = str.replaceAll("\\s+", " ");

これは、「連続する空白を単一のスペースに置き換える」という正規表現です。可能な限り最速ではないかもしれませんが、他のことを試す前にベンチマークを行います.

これにより、すべての空白がスペースに置き換えられることに注意してください。したがって、タブやその他の空白文字がある場合は、それらもスペースに置き換えられます。

于 2013-04-06T09:32:05.047 に答える
3

これらの方法を使用することは許可されていません。私はループとすべてでこれをしなければなりません。

より高速で効率的な方法を使用できない場合は、コードの小さなスニペットを書きました。

String str = "    this is    a   string  containing numerous  whitespaces   ";
StringBuffer buff = new StringBuffer();
String correctedString = "";
boolean space = false;
for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    if (c == ' ') {
        if (!space && i > 0) {
            buff.append(c);
        }
        space = true;
    }
    else {
        buff.append(c);
        space = false;
    }
}
String temp = buff.toString();
if (temp.charAt(temp.length() - 1) == ' ') {
    correctedString = temp.substring(0, buff.toString().length() - 1);
    System.out.println(correctedString);
}
System.out.println(buff.toString())

ノート:

しかし、これは「ハードコーディング」されており、「学習」専用です。

より効率的な方法は、@JonSkeetと@BrunoReisによって指摘されたアプローチを確実に使用することです

于 2013-04-06T09:37:21.667 に答える
2

どうstr = str.replaceAll(" +", " ").trim();ですか?

使用したくない場合trim()(使用しない理由がわかりません)、次のように置き換えます。

str = str.replaceAll(" +", " ").replaceAll("^ ", "").replaceAll(" $", "");`
于 2013-04-06T09:30:54.643 に答える
0

組み込みのライブラリ関数を使用せずに空白を削除する これは固定配列サイズの単純な例です。

public class RemWhite{ 
public static void main(String args[]){ 
String s1=" world qwer ";
int count=0;
char q[]=new char[9];
char ch[]=s1.toCharArray();
System.out.println(ch); 

    for(int i=0;i<=ch.length-1;i++)
   {
     int j=ch[i];
     if(j==32)
     {
      continue;
     }
   else
      q[count]=ch[i];
      count++;

      } 
   System.out.println(q); 

  }} 
于 2016-05-23T19:16:39.330 に答える
-1

このコードは、trim() を使用せずに、指定された文字列内の空白とアルファベットの繰り返しを削除するために使用されます。ユーザーから文字列を受け取ります。charAt() を使用して文字で区切り、各文字を null(' ') と比較します。null が見つかった場合はスキップして、else 部分にその文字を表示します。null をスキップするために、インデックス i を 1 増やします。このコードを試して、問題を解決してください。

String name = " abc "; 
System.out.println(name);
for (int i = 0; i < name.length(); i++) {
    char ch = name.charAt(i);
    if (ch == ' ') {
        i = 2 + i - 2;
    } else {
        System.out.print(name.charAt(i));
    }
}
于 2015-11-05T19:39:32.757 に答える