Javaでは、私はこのような文字列を持っています:
" content ".
ウィルString.trim()
各上のすべてのこれらの側面にスペースまたは一つだけのスペースを削除しますか?
Javaでは、私はこのような文字列を持っています:
" content ".
ウィルString.trim()
各上のすべてのこれらの側面にスペースまたは一つだけのスペースを削除しますか?
回答:
戻り値:先頭と末尾の空白を削除したこの文字列のコピー。先頭または末尾に空白がない場合はこの文字列。
〜Java 1.5.0ドキュメントから引用
(しかし、なぜそれを試して自分の目で確かめなかったのですか?)
Chararacter.isWhitespace
ますが、それは「空白」が意味するものではありません ..
trim
、isWhiteSpace
などの包括的な分析や、Javaドキュメントのあいまいさの説明を意図したものではありません。これは、上記の特定の質問に対する簡単な答えです。つまり、このtrim
メソッドは単一のスペースまたは複数のスペースを削除しますか?
ソースコードから(逆コンパイル):
public String trim()
{
int i = this.count;
int j = 0;
int k = this.offset;
char[] arrayOfChar = this.value;
while ((j < i) && (arrayOfChar[(k + j)] <= ' '))
++j;
while ((j < i) && (arrayOfChar[(k + i - 1)] <= ' '))
--i;
return (((j > 0) || (i < this.count)) ? substring(j, i) : this);
}
表示されている2つwhile
は、最初と最後に、Unicodeがスペース文字の下にあるすべての文字が削除されていることを意味します。
ただし、String.trimには「空白」の独特の定義があることを指摘しておく必要があります。Unicodeの空白は削除されませんが、空白とは見なされない可能性のあるASCII制御文字も削除されます。
このメソッドは、文字列の最初と最後から空白を削除するために使用できます。実際、すべてのASCII制御文字もトリミングします。
可能であれば、Commons LangのStringUtils.strip()を使用することもできます。これは、Unicodeの空白も処理します(ヌルセーフでもあります)。
StringクラスのAPIを参照してください:
文字列のコピーを返します。先頭と末尾の空白は省略されています。
両側の空白が削除されます。
trim()
Stringインスタンスは変更しないことに注意してください。新しいオブジェクトが返されます。
String original = " content ";
String withoutWhitespace = original.trim();
// original still refers to " content "
// and withoutWhitespace refers to "content"
Javaのドキュメントに基づいて、ここで、.trim()
一般的に空白として知られている置き換え「\ U0020」。
ただし、 '\ u00A0'(Unicode NO-BREAK SPACE
)は空白としても認識され、.trim()
これを削除しないことに注意してください。これはHTMLで特に一般的です。
それを削除するには、私は使用します:
tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0", "");
trim()
スペースを削除するJavaの例:
public class Test
{
public static void main(String[] args)
{
String str = "\n\t This is be trimmed.\n\n";
String newStr = str.trim(); //removes newlines, tabs and spaces.
System.out.println("old = " + str);
System.out.println("new = " + newStr);
}
}
出力
old =
This is a String.
new = This is a String.
java docs(String class source)から、
/**
* Returns a copy of the string, with leading and trailing whitespace
* omitted.
* <p>
* If this <code>String</code> object represents an empty character
* sequence, or the first and last characters of character sequence
* represented by this <code>String</code> object both have codes
* greater than <code>'\u0020'</code> (the space character), then a
* reference to this <code>String</code> object is returned.
* <p>
* Otherwise, if there is no character with a code greater than
* <code>'\u0020'</code> in the string, then a new
* <code>String</code> object representing an empty string is created
* and returned.
* <p>
* Otherwise, let <i>k</i> be the index of the first character in the
* string whose code is greater than <code>'\u0020'</code>, and let
* <i>m</i> be the index of the last character in the string whose code
* is greater than <code>'\u0020'</code>. A new <code>String</code>
* object is created, representing the substring of this string that
* begins with the character at index <i>k</i> and ends with the
* character at index <i>m</i>-that is, the result of
* <code>this.substring(<i>k</i>, <i>m</i>+1)</code>.
* <p>
* This method may be used to trim whitespace (as defined above) from
* the beginning and end of a string.
*
* @return A copy of this string with leading and trailing white
* space removed, or this string if it has no leading or
* trailing white space.
*/
public String trim() {
int len = count;
int st = 0;
int off = offset; /* avoid getfield opcode */
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[off + st] <= ' ')) {
st++;
}
while ((st < len) && (val[off + len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < count)) ? substring(st, len) : this;
}
開始と長さを取得した後、Stringクラスのsubstringメソッドを呼び出すことに注意してください。
trim()
先頭と末尾の空白がすべて削除されます。ただし、注意してください:文字列は変更されません。trim()
代わりに新しい文字列インスタンスを返します。
文字列入力が次の場合:
String a = " abc ";
System.out.println(a);
はい、出力は「abc」になります。しかし、あなたの文字列入力が:
String b = " This is a test "
System.out.println(b);
そのため、出力は次のようになりThis is a test
ます。トリムでは、文字列の最初の文字の前と最後の文字の後のスペースのみが削除され、内部のスペースは無視されます。これは、組み込みのString
トリムメソッドをわずかに最適化して内部のスペースを削除し、文字列の最初と最後の文字の前後のスペースを削除する私のコードの一部です。それが役に立てば幸い。
public static String trim(char [] input){
char [] output = new char [input.length];
int j=0;
int jj=0;
if(input[0] == ' ' ) {
while(input[jj] == ' ')
jj++;
}
for(int i=jj; i<input.length; i++){
if(input[i] !=' ' || ( i==(input.length-1) && input[input.length-1] == ' ')){
output[j]=input[i];
j++;
}
else if (input[i+1]!=' '){
output[j]=' ';
j++;
}
}
char [] m = new char [j];
int a=0;
for(int i=0; i<m.length; i++){
m[i]=output[a];
a++;
}
return new String (m);
}
.trim()
はSystem.out.println(a);
?
非常に重要なことの1つは、完全に「空白」で構成される文字列が空の文字列を返すことです。
あればstring sSomething = "xxxxx"
、どこx
の空白を表し、sSomething.trim()
空の文字列を返します。
あればstring sSomething = "xxAxx"
、どこx
の空白を表し、sSomething.trim()
返されますA
。
がを返す場合sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
、単語間の数は変更されないsSomething.trim()
ことSomethingxxxxAndSomethingxElse
に注意してx
ください。
trim()
この投稿に示すように、きちんとパケット化された文字列を正規表現と組み合わせる場合:Javaを使用して文字列内の重複する空白を削除する方法は?。
順序は結果にとって意味trim()
がありませんが、最初はより効率的です。それが役に立てば幸い。
StringのJavadocにすべての詳細があります。両端から空白(スペース、タブなど)を削除し、新しい文字列を返します。
なんらかの方法で何が行われるかを確認したい場合は、BeanShellを使用できます。これは、Javaにできる限り近づくように設計されたスクリプト言語です。一般的に言えば、それはJavaをいくつかの緩和とともに解釈します。この種の別のオプションは、Groovy言語です。これらのスクリプト言語はどちらも、インタープリター言語からわかる便利なRead-Eval-Printループを提供します。したがって、コンソールを実行して次のように入力できます。
" content ".trim();
を"content"
押すとEnter
(またはCtrl+R
Groovyコンソールで)結果が表示されます。
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\\s+", " ");
trim()
、repkaceAll()
はすでに実行することを実行します。