2009-02-27 13 views
56

私はこのような文字列を持っていますJava文字列から行末文字を削除する

"hello 
java 
book" 

文字列(hello \ r \ njava \ r \ nbook)から\ rと\ nを削除します。私は文字列を "hellojavabook"としたい。これどうやってするの?

答えて

4

str = str.replaceAll("\\\\r","") 
str = str.replaceAll("\\\\n","") 
+0

Zounds。私にそれを打つ! –

+2

これは不必要に非効率的な方法です。 –

2

あなたは、空の文字列で\ nまたは\ rのいずれかの発生を置き換えるためにreplaceAllメソッドを使用してみましたか?

110

regex with replaceAll。

str = str.replaceAll("\\r\\n", ""); 
+8

ハードコーディングされたラインブレーカの代わりに、 'System.getProperty(" line.separator ");'を使用することをお勧めします。各OSにはそれぞれ独自の行区切り文字があります。 – GGrec

+2

私もそうだけど、質問は特に\ rと\ nを使った。 – TofuBeer

+2

@GGrecテキストString/Fileが同じOSで作られていないことがある。したがって、 'System.getProperty(" line.separator ");'はこれらの場合は機能しません。しかし、同じOSの起源を信頼できる場合は、システムプロパティを使用する方がよいでしょう。 – Mindwin

10

あなたが避けたい場合は:あなたが唯一の彼らはペアである場合、\ rをする\ nを削除する場合

public class Main 
{ 
    public static void main(final String[] argv) 
    { 
     String str; 

     str = "hello\r\njava\r\nbook"; 
     str = str.replaceAll("(\\r|\\n)", ""); 
     System.out.println(str); 
    } 
} 

代わりにこれを行う(上記のコードは、\ rのか\ nのいずれかが削除されます)正規表現、またはそれ以前のJVM、String.replaceを(ターゲット必要があります)を行います。

str=str.replace("\r","").replace("\n",""); 

をそしてCRLFペアを削除するには:

str=str.replace("\r\n",""); 

後者は、同じことをするための正規表現を構築するよりも効率的です。しかし、文字列は一度だけ解析されるので、前者は正規表現として高速になると思います。

1
static byte[] discardWhitespace(byte[] data) { 
    byte groomedData[] = new byte[data.length]; 
    int bytesCopied = 0; 

    for (int i = 0; i < data.length; i++) { 
     switch (data[i]) { 
      case (byte) '\n' : 
      case (byte) '\r' : 
       break; 
      default: 
       groomedData[bytesCopied++] = data[i]; 
     } 
    } 

    byte packedData[] = new byte[bytesCopied]; 

    System.arraycopy(groomedData, 0, packedData, 0, bytesCopied); 

    return packedData; 
} 

コードはcommons-codec projectにあります。

あなたがこれはすべての主要な文字列にスペースながら傾いてトリミングすることを意図する

string.trim(); 

-5

てみました。お役に立てれば。

編集:(私は十分に明示的ではなかった)

だから、あなたのstring.Split()、あなたは[]の文字列になります - 配列内の文字列ごとに、string.trimを行います( )、それを追加します。

String[] tokens = yourString.split(" "); 
StringBuffer buff = new StringBuffer(); 
for (String token : tokens) 
{ 
    buff.append(token.trim()); 
} 

同じ文字列での追加ではなく、stringBuffer/Builderを使用します。

+0

何が問題なのですか?トリムはすべてを取り除き、文字列だけを返しますか? –

+4

トリムは、先頭/末尾の空白を削除します。文字列の途中の改行は削除されません。 – Joseph

9
public static void main(final String[] argv) 
{ 
    String str; 

    str = "hello\r\n\tjava\r\nbook"; 
    str = str.replaceAll("(\\r|\\n|\\t)", ""); 
    System.out.println(str); 
} 

正規表現にも表を追加すると便利です。

関連する問題