जावा में, मेरे पास एक स्ट्रिंग है जैसे:
" content ".
क्या String.trim()
इन स्थानों पर सभी रिक्त स्थान या प्रत्येक पर सिर्फ एक स्थान हटा देगा ?
जावा में, मेरे पास एक स्ट्रिंग है जैसे:
" content ".
क्या String.trim()
इन स्थानों पर सभी रिक्त स्थान या प्रत्येक पर सिर्फ एक स्थान हटा देगा ?
जवाबों:
रिटर्न : इस स्ट्रिंग की एक प्रतिलिपि जो सफेद स्थान को हटाती या पीछे ले जाती है, या यह स्ट्रिंग, जिसके पास कोई अग्रणी या सफेद स्थान नहीं है।
~ जावा 1.5.0 डॉक्स से उद्धृत
(लेकिन आपने इसे सिर्फ अपने लिए क्यों नहीं देखा?)
Chararacter.isWhitespace
यह सच है, लेकिन "
trim
, isWhiteSpace
आदि, या जावा डॉक्स में अस्पष्टता की चर्चा का व्यापक विश्लेषण करने का इरादा नहीं है ; यह ऊपर पूछे गए विशिष्ट प्रश्न का एक सीधा जवाब है - अर्थात, क्या 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);
}
दो while
जो आप देख सकते हैं, वे सभी वर्ण जिनका यूनिकोड अंतरिक्ष के चरित्र के नीचे है, शुरुआत और अंत में हटा दिए जाते हैं।
जब संदेह हो, तो एक इकाई परीक्षण लिखें:
@Test
public void trimRemoveAllBlanks(){
assertThat(" content ".trim(), is("content"));
}
NB : बेशक परीक्षण (JUnit + Hamcrest के लिए) विफल नहीं होता है
हालांकि, एक बात और बताई जा सकती है कि String.trim की "व्हॉट्सएप" की एक अजीब परिभाषा है। यह यूनिकोड व्हाट्सएप को नहीं हटाता है, बल्कि ASCII नियंत्रण वर्णों को भी हटा देता है जिसे आप व्हाट्सएप नहीं मान सकते।
इस पद्धति का उपयोग एक स्ट्रिंग की शुरुआत और अंत से व्हाट्सएप ट्रिम करने के लिए किया जा सकता है; वास्तव में, यह सभी ASCII नियंत्रण वर्णों को भी प्रभावित करता है।
यदि संभव हो, तो आप कॉमन्स लैंग के स्ट्रिंगरगिल्स.स्ट्रिप () का उपयोग करना चाह सकते हैं, जो कि यूनिकोड व्हाट्सएप भी संभालता है (और अशक्त है, भी)।
स्ट्रिंग वर्ग के लिए एपीआई देखें :
स्ट्रिंग की एक प्रतिलिपि लौटाता है, जिसके साथ व्हाट्सएप लोप हो जाता है।
दोनों तरफ के व्हाट्सएप को हटा दिया गया है:
नोट करें कि trim()
स्ट्रिंग का उदाहरण नहीं बदलता है, यह एक नई वस्तु लौटाएगा:
String original = " content ";
String withoutWhitespace = original.trim();
// original still refers to " content "
// and withoutWhitespace refers to "content"
यहाँ जावा डॉक्स के आधार पर , .trim()
'\ u0020' को प्रतिस्थापित किया जाता है जिसे आमतौर पर व्हाट्सएप के रूप में जाना जाता है।
लेकिन ध्यान दें, '\ u00A0' ( यूनिकोड NO-BREAK स्पेस
) को व्हॉट्सएप के रूप में भी देखा जाता है, और .trim()
इसे हटाया नहीं जाएगा। यह HTML में विशेष रूप से आम है।
इसे हटाने के लिए, मैं उपयोग करता हूं:
tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0", "");
इस समस्या का एक उदाहरण यहाँ चर्चा की गई थी ।
जावा trim()
हटाने के स्थानों का उदाहरण :
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.
जावा डॉक्स (स्ट्रिंग क्लास सोर्स) से,
/**
* 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 a = " abc ";
System.out.println(a);
हां, आउटपुट होगा, "एबीसी"; लेकिन अगर आपका स्ट्रिंग इनपुट है:
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);
?
एक बहुत महत्वपूर्ण बात यह है कि पूरी तरह से "सफेद रिक्त स्थान" से बना एक स्ट्रिंग एक खाली स्ट्रिंग लौटाएगा।
यदि कोई है string sSomething = "xxxxx"
, जहां x
सफेद रिक्त स्थान के लिए खड़ा है , तो एक sSomething.trim()
खाली स्ट्रिंग लौटाएगा।
यदि एक string sSomething = "xxAxx"
, जहां x
सफेद रिक्त स्थान के लिए खड़ा है, sSomething.trim()
वापस आ जाएगा A
।
यदि sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
, sSomething.trim()
वापस आएगा SomethingxxxxAndSomethingxElse
, तो ध्यान दें कि x
शब्दों के बीच की संख्या में परिवर्तन नहीं किया गया है।
यदि आप trim()
इस पोस्ट में दिखाए गए अनुसार रेगेक्स के साथ एक साफ पैकेट वाला स्ट्रिंग संयोजन चाहते हैं : जावा का उपयोग करके स्ट्रिंग में डुप्लिकेट सफेद रिक्त स्थान कैसे निकालें? ।
आदेश परिणाम के लिए अर्थहीन है, लेकिन trim()
पहले अधिक कुशल होगा। आशा करता हूँ की ये काम करेगा।
स्ट्रिंग के लिए केवल एक उदाहरण रखने के लिए, आप निम्नलिखित का उपयोग कर सकते हैं।
str = " Hello ";
या
str = str.trim();
फिर str
स्ट्रिंग का मूल्य , होगाstr = "Hello"
स्ट्रिंग के लिए Javadoc में सभी विवरण हैं। दोनों छोर से सफेद स्थान (स्थान, टैब, आदि) को निकालता है और एक नया स्ट्रिंग लौटाता है।
यदि आप जांचना चाहते हैं कि कुछ विधि क्या होगी, तो आप बीनशेल का उपयोग कर सकते हैं । यह एक स्क्रिप्टिंग भाषा है जिसे जावा के जितना संभव हो उतना करीब से बनाया गया है। आम तौर पर बोलते हुए यह जावा को कुछ आराम के साथ व्याख्यायित किया जाता है। इस तरह का एक और विकल्प ग्रूवी भाषा है। ये दोनों स्क्रिप्टिंग भाषाएं व्याख्यात्मक भाषाओं से सुविधाजनक रीड-एवल-प्रिंट लूप प्रदान करती हैं। तो आप कंसोल चला सकते हैं और बस टाइप करें:
" content ".trim();
आपको "content"
दबाने के बाद परिणाम दिखाई देगा Enter
(या Ctrl+R
ग्रूवी कंसोल में)।
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\\s+", " ");
trim()
पहले से ही क्या repkaceAll()
करना है, अगर वहाँ कुछ भी करने के लिए इसे छोड़ दिया गया था।