জাভাতে, আমার কাছে একটি স্ট্রিং রয়েছে:
" content ".
হবে String.trim()
প্রতিটি এই পক্ষের সব স্পেস বা শুধু একটা স্থান সরাবেন?
জাভাতে, আমার কাছে একটি স্ট্রিং রয়েছে:
" content ".
হবে String.trim()
প্রতিটি এই পক্ষের সব স্পেস বা শুধু একটা স্থান সরাবেন?
উত্তর:
তাদের সব ।
রিটার্নস : শীর্ষস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্থানটি সহ এই স্ট্রিংয়ের একটি অনুলিপি, বা এই স্ট্রিংটির যদি কোনও শীর্ষস্থানীয় বা অনুসরণকারী শ্বেত স্থান না থাকে।
Java জাভা 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"));
}
এনবি : অবশ্যই পরীক্ষা (জুনিত + হ্যামক্রাস্টের জন্য) ব্যর্থ হয় না
একটি বিষয় উল্লেখ করার মতো, তবে স্ট্রিং.ট্রিমের "হোয়াইটস্পেস" এর একটি অদ্ভুত সংজ্ঞা রয়েছে। এটি ইউনিকোড হোয়াইটস্পেস অপসারণ করে না, তবে ASCII নিয়ন্ত্রণ অক্ষরও সরিয়ে দেয় যা আপনি হোয়াইটস্পেস বিবেচনা করতে পারেন না।
এই পদ্ধতিটি স্ট্রিংয়ের শুরু এবং শেষ থেকে হোয়াইটস্পেস ছাঁটাই করতে ব্যবহার করা যেতে পারে; বাস্তবে, এটি সমস্ত ASCII নিয়ন্ত্রণ অক্ষরগুলিকেও ছাঁটাই করে।
যদি সম্ভব হয় তবে আপনি কমন্স ল্যাং-এর স্ট্রিংইটিলস.স্ট্রিপ () ব্যবহার করতে পারেন, এটি ইউনিকোড হোয়াইটস্পেসও পরিচালনা করে (এবং এটিও নাল-নিরাপদ)।
স্ট্রিং ক্লাসের জন্য এপিআই দেখুন :
নেতৃস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্পেস বাদ দিয়ে স্ট্রিংয়ের একটি অনুলিপি দেয়।
উভয় পক্ষের সাদা স্থান সরানো হয়েছে:
নোট যে trim()
স্ট্রিং উদাহরণ পরিবর্তন করে না, এটি একটি নতুন অবজেক্ট ফিরিয়ে দেবে:
String original = " content ";
String withoutWhitespace = original.trim();
// original still refers to " content "
// and withoutWhitespace refers to "content"
এখানে জাভা ডক্সের ভিত্তিতে , .trim()
'\ u0020' প্রতিস্থাপন করে যা সাধারণত সাদা স্থান হিসাবে পরিচিত as
তবে খেয়াল করুন, '\ u00A0' ( ইউনিকোড নো- BREAK স্পেস
) একটি সাদা স্থান হিসাবে দেখা গেছে, এবং .trim()
এটি মুছে ফেলবে না। এটি এইচটিএমএলে বিশেষত সাধারণ।
এটি অপসারণ করতে, আমি ব্যবহার করি:
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;
}
নোট করুন যে শুরু এবং দৈর্ঘ্য পাওয়ার পরে এটি স্ট্রিং ক্লাসের সাবস্ট্রিং পদ্ধতিটিকে কল করে।
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);
?
একটি খুব গুরুত্বপূর্ণ বিষয় হ'ল সম্পূর্ণরূপে "সাদা স্পেস" দিয়ে তৈরি একটি স্ট্রিং একটি খালি স্ট্রিং ফিরে আসবে।
যদি একটি 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"
স্ট্রিংয়ের জাভাদোকের সমস্ত বিবরণ রয়েছে। উভয় প্রান্ত থেকে সাদা স্থান (স্থান, ট্যাব, ইত্যাদি) সরিয়ে দেয় এবং একটি নতুন স্ট্রিং দেয়।
কিছু পদ্ধতি কী করবে তা যদি আপনি পরীক্ষা করতে চান তবে আপনি বিনশেল ব্যবহার করতে পারেন । এটি জাভা যতটা সম্ভব কাছাকাছি হওয়ার জন্য ডিজাইন করা একটি স্ক্রিপ্টিং ভাষা। সাধারণত এটি জাভা কিছু শিথিল সঙ্গে ব্যাখ্যা করা হয়। এই ধরণের আরেকটি বিকল্প হ'ল গ্রোভি ভাষা। এই উভয় স্ক্রিপ্টিং ভাষা ব্যাখ্যামূলক ভাষা থেকে সুবিধাজনক রিড-ইভাল-প্রিন্ট লুপ জানে। সুতরাং আপনি কনসোল চালাতে পারেন এবং কেবল টাইপ করুন:
" content ".trim();
আপনি টিপানোর "content"
পরে ফলাফল হিসাবে দেখতে পাবেন Enter
(বা Ctrl+R
গ্রোভি কনসোলে)।
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\\s+", " ");
trim()
ইতিমধ্যে যা করতে repkaceAll()
হবে তা করে ।