জাভা ব্যবহার করে স্ট্রিংয়ের নকল সাদা স্থানগুলি কীভাবে সরিয়ে ফেলবেন?


147

জাভা ব্যবহার করে স্ট্রিংয়ে নকল সাদা স্থান (ট্যাবস, নিউলাইনস, স্পেসস, ইত্যাদি ...) সহ কীভাবে সরিয়ে ফেলা যায়?

উত্তর:


378

এটার মত:

yourString = yourString.replaceAll("\\s+", " ");

উদাহরণ স্বরূপ

System.out.println("lorem  ipsum   dolor \n sit.".replaceAll("\\s+", " "));

আউটপুট

lorem ipsum dolor sit.

তার \s+মানে কী?

\s+একটি নিয়মিত প্রকাশ। \sএকটি স্পেস, ট্যাব, নতুন লাইন, ক্যারেজ রিটার্ন, ফর্ম ফিড বা উল্লম্ব ট্যাবের সাথে মেলে এবং +"এর মধ্যে এক বা একাধিক" বলেছেন। সুতরাং উপরের কোডটি একটি একক স্পেস অক্ষরের সাথে এক অক্ষরের চেয়ে দীর্ঘ সমস্ত "হোয়াইটস্পেস সাবস্ট্রিংগুলি" ভেঙে দেবে।


উত্স: জাভা: স্ট্রিংগুলিতে সদৃশ শূন্যস্থান সরিয়ে ফেলা হচ্ছে


3
@ সুহরবসামিয়েভ - স্ট্রিং.রেপ্লেস সমস্ত () জেডিকে ১.৪ এর পর থেকে জাভাতে রয়েছেন। docs.oracle.com/javase/1.4.2/docs/api/java/lang/… , java.lang.String)
ডেভিড মোল

3
আমি চাই I s + এর দুর্দান্ত ব্যাখ্যাটির জন্য আমি +1 এরও বেশি যুক্ত করতে পারতাম।
সিনটেক

আমি বুঝতে পেরেছি \s+তবে 2 ব্যাকস্ল্যাশ মানে কি?
রোপণপ্রো

2
স্ট্রিং আক্ষরিক "\\"একটি একক ব্যাকস্ল্যাশ সমন্বিত স্ট্রিং প্রতিনিধিত্ব করে। তাই \s+আপনি লিখতে প্রতিনিধিত্ব করতে "\\s+"
আইয়ুব

1
এটি কি গাড়ীর ফেরত সরিয়ে দেবে? অথবা আমি আলাদাভাবে "\\ r" মুছে ফেলতে হবে? ধন্যবাদ!
ব্যবহারকারী 3388884

24

আপনি রেজেক্স ব্যবহার করতে পারেন

(\s)\1

এবং

এটি দিয়ে প্রতিস্থাপন $1

জাভা কোড:

str = str.replaceAll("(\\s)\\1","$1");

যদি ইনপুট থাকে তবে "foo\t\tbar "আপনি "foo\tbar "আউটপুট হিসাবে পাবেন
তবে যদি ইনপুট হয় তবে "foo\t bar"এটি অপরিবর্তিত থাকবে কারণ এর কোনও পরপর সাদা অংশ নেই।

আপনি যদি সমস্ত সাদা স্থানের অক্ষর (স্পেস, উল্লম্ব ট্যাব, অনুভূমিক ট্যাব, ক্যারিয়ার রিটার্ন, ফর্ম ফিড, নতুন লাইন) স্থান হিসাবে বিবেচনা করে থাকেন তবে আপনি কোনও একক স্পেসের সাথে ক্রমাগত শ্বেত স্থানের সংখ্যার প্রতিস্থাপন করতে নীচের রেজেক্সটি ব্যবহার করতে পারেন :

str = str.replaceAll("\\s+"," ");

তবে আপনি যদি একক স্থানের সাথে টানা দুটি সাদা স্থান প্রতিস্থাপন করতে চান তবে আপনার করা উচিত:

str = str.replaceAll("\\s{2}"," ");

9

এটি ব্যবহার করে দেখুন - আপনাকে করতে হবে import java.util.regex.*;

    Pattern pattern = Pattern.compile("\\s+");
    Matcher matcher = pattern.matcher(string);
    boolean check = matcher.find();
    String str = matcher.replaceAll(" ");

stringআপনার স্ট্রিংটি যেখানে আপনার নকল সাদা স্থান সরিয়ে ফেলতে হবে


9

হাই, আমি সবচেয়ে দ্রুত (তবে সবচেয়ে সুন্দর উপায় নয়) পেয়েছি

while (cleantext.indexOf("  ") != -1)
  cleantext = StringUtils.replace(cleantext, "  ", " ");

এটি একটি রেজেক্সের বিপরীতে অ্যান্ড্রয়েডে বেশ দ্রুত চলছে


1
শুধুমাত্র স্পেসের জন্য কাজ করে তবে ট্যাবস এবং নিউলাইনগুলির মতো অন্যান্য সাদা স্থানগুলিতে নয়।
প্যাং

1
আমি জানি, অন্যান্য সত্তাগুলির জন্য লুপ করার সময় আপনাকে এগুলি আরও যুক্ত করতে হবে। তবে এই কোডটি অ্যান্ড্রয়েডে এই রেজেেক্স হিসাবে আরও দ্রুত চালিত হয়েছে, আমাকে সম্পূর্ণ ইবুকগুলি প্রক্রিয়া করতে হয়েছিল।
wutzebaer

ডেস্কটপেও অত্যন্ত দ্রুত। এটি একটি বড় স্ট্রিংয়ের জন্য পরীক্ষিত হয়নি, তবে আপনি যদি এটির অনেকগুলি ছোট স্ট্রিংয়ের উপর চালানোর পরিকল্পনা করেন তবে এটি আপনার সন্ধানের উত্তর।
ইভালেট

9
String str = "   Text    with    multiple    spaces    ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"

6

যদিও এটি অনেক দেরি হয়ে গেছে, আমি একটি আরও ভাল সমাধান পেয়েছি (যা আমার পক্ষে কাজ করে) যা এক ধরণের একই ধরণের সাদা স্পেসকে এর ধরণের একটি সাদা স্পেসের সাথে প্রতিস্থাপন করবে। এটাই:

   Hello!\n\n\nMy    World  

হবে

 Hello!\nMy World 

লক্ষ্য করুন যে এখনও শূন্যস্থানগুলি শীর্ষস্থানীয় এবং পিছনে রয়েছে। সুতরাং আমার সম্পূর্ণ সমাধানটি হ'ল:

str = str.trim().replaceAll("(\\s)+", "$1"));

এখানে, trim()"" দিয়ে সমস্ত নেতৃস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্পেস স্ট্রিং প্রতিস্থাপন করে। # 1 গোষ্ঠীতে(\\s) ক্যাপচার করার জন্য \\s(এটি সাদা স্পেস যেমন '', '\ n', '\ t') । 1 বা ততোধিক পূর্বের টোকেনটি মিলানোর জন্য সাইন। সুতরাং কোনও একক সাদা স্পেস অক্ষরের ('', '\ n' বা '\ t') এর মধ্যে একের পরের অক্ষর (1 বা ততোধিক) হতে পারে। ম্যাচিং টাইপের (যা মিলছে এমন একক সাদা স্থানের অক্ষর) গোষ্ঠী # 1 স্ট্রিংয়ের (যা কেবলমাত্র 1 সাদা স্পেস অক্ষর ধারণ করে) সাথে ম্যাচিং স্ট্রিংগুলি প্রতিস্থাপনের জন্য । উপরের সমাধানটি এর মতো পরিবর্তিত হবে:+(\\s)+$1

   Hello!\n\n\nMy    World  

হবে

Hello!\nMy World

আমি আমার উপরের সমাধানটি এখানে পাইনি তাই আমি এটি পোস্ট করেছি।


0

আপনি যদি সমস্ত শীর্ষস্থানীয় এবং অনুসরণীয় বহির্মুখী সাদা স্থান থেকে মুক্তি পেতে চান তবে আপনি এর মতো কিছু করতে চান:

// \\A = Start of input boundary
// \\z = End of input boundary 
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");

তারপরে আপনি এখানে তালিকাভুক্ত অন্যান্য কৌশল ব্যবহার করে সদৃশগুলি সরিয়ে ফেলতে পারেন:

string = string.replaceAll("\\s+"," ");

0

আপনি স্ট্রিং টোকেনাইজার ব্যবহার করে, যে কোনও স্থান, ট্যাব, নিউলাইন এবং সমস্ত কিছুর জন্যও চেষ্টা করতে পারেন। একটি সহজ উপায় হ'ল,

String s = "Your Text Here";        
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
    System.out.print(st.nextToken());
}

-10

এটি তিনটি ধাপে সম্ভব হতে পারে:

  1. স্ট্রিংকে অক্ষর অ্যারেতে রূপান্তর করুন (ToCharArray)
  2. চরার অ্যারেতে লুপের জন্য আবেদন করুন
  3. তারপরে স্ট্রিং রিপ্লেজ ফাংশন প্রয়োগ করুন ("আপনি যে স্টিং প্রতিস্থাপন করতে চান", "আসল স্ট্রিং") প্রতিস্থাপন করুন)

1
এটি কোনও ভাল সমাধান নয়, একটি চর অ্যারে ছেড়ে যাওয়া কোনও সমস্যার সমাধান করে না। আপনি বাস্তবে কীভাবে প্রতিস্থাপন করবেন তা ব্যাখ্যা করছেন না যা সমস্যার মূল বিষয়। এছাড়াও দয়া করে সম্পূর্ণ সম্পর্কযুক্ত লিঙ্কগুলি পোস্ট করবেন না । আপনি যদি এটি করেন তবে আপনি একটি স্প্যামার হিসাবে পতাকাঙ্কিত হবেন।
মাদুর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.