2017-01-08 11 views
0

String.trim()を使用せずにこれを行うという考えで遊んでいました。先頭と末尾の空白をトリムするメソッドを作成しました。以下にその例を示します。Javaで文字列を手動でトリミングする(String.trim()なし)

public static String removeLeadingAndTrailingSpaces(String s) { 
    StringBuilder sb = new StringBuilder(); 
    int i = 0; 

    while (s.charAt(i) == ' ') { 
     i++; 
    } 

    for (; i < s.length(); i++) { 
     sb.append(s.charAt(i)); 
    } 

    // aux is the string with only leading spaces removed 
    String aux = sb.toString(); 
    int j = aux.length() - 1; 

    while (aux.charAt(j) == ' ') { 
     j--; 
    } 

    // now both leading and trailing spaces have been removed 
    String result = aux.substring(0, j + 1); 

    return result; 
} 

私はそれをテストして100%動作します。しかし、私はこれが最も効率的で実用的な実装であるとは確信していません。それ以外はどうすればできましたか?私は余分な変数auxjを使わなくてもやり遂げることができると思っていますが、私はそのための道を見出すことができませんでした。

+0

がString.trimのソースコードを見てください()。そこでは非常に効率的な実装です。 –

+2

[これはJDKに実装されている方法](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/lang/String.java#String.trim) %28%29)。 – 4castle

+0

このトピックはhttp://codereview.stackexchange.com/ – Andreas

答えて

3

末尾からsを調べて、末尾の空白がどこから始まるかを調べて、部分文字列sを返します。 sbまたはauxの必要ありません:trim()に近い近似のため

public static String removeLeadingAndTrailingSpaces(String s) { 
    int end = s.length(); 
    int i = 0; 

    while (i < end && s.charAt(i) == ' ') { 
     i++; 
    } 

    while (end > i && s.charAt(end - 1) == ' ') { 
     end--; 
    } 

    return end> i ? s.substring(i, end) : ""; 
} 

、あなたは' 'だけでなく、すべての空白文字に対してチェックしたいと思います。

+0

に属しているため、このトピックを議論の対象にしないように議論しています。 'trim()'を模倣するには '== ''' '' <= '' ' – 4castle

+0

@ 4castle - (実際には' trim() 'のバグのないバージョンではありません)。 '<= '''を使用すると、シンスペース(U + 2009)などのさまざまなUnicode空白文字コードでは機能しません。より良い解決策は、 'Character.isWhiteSpace()'を使うことです。 –

+0

[JDKでは '<= '''](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40を使用しているため、「より良い」とは言えません。 -b25/java/lang/String.java#String.trim%28%29)。使用する仕様、JDK、または独自の仕様に依存します。 – 4castle

0

スペースを削除するには、 myString.replace( ""、 "");を使用してください。

おかげで、よろしく、 ディリップD

+0

これは、OPが望むような先頭と末尾のスペースだけでなく、すべてのスペースを削除します。 –

関連する問題