জাভাতে কোনও ফাইল থেকে লাইন ব্রেকগুলি কীভাবে সরিয়ে নেওয়া যায়?


258

জাভাতে স্ট্রিং থেকে সমস্ত লাইন ব্রেকগুলি এমনভাবে কীভাবে প্রতিস্থাপন করতে পারি যা উইন্ডোজ এবং লিনাক্সে কাজ করবে (যেমন কোনও ক্যারেজ রিটার্ন / লাইন ফিড / নতুন লাইন ইত্যাদির কোনও ওএস নির্দিষ্ট সমস্যা নেই)?

আমি চেষ্টা করেছি (নোট রিডফাইএল স্ট্রিং একটি ফাংশন যা কোনও স্ট্রিংয়ে একটি পাঠ্য ফাইল পড়ে):

String text = readFileAsString("textfile.txt");
text.replace("\n", "");

কিন্তু এটি কাজ করে না বলে মনে হচ্ছে।

কিভাবে এই কাজ করা যেতে পারে?


আপনি কি সমস্ত লাইন বিরতি দূর করতে চান? বা আপনি কি তাদের একটি আদর্শ সমাধানে একীকরণ করতে চান?
হিলিওস

4
ওহ, আপনি যদি সমস্ত লাইনফিড মুছতে চান তবে সমস্ত remove n এবং সমস্ত remove r মুছে ফেলুন (কারণ উইন্ডোজ লাইনব্রেকটি \ r \ n)।
হিলিওস

আরে, এফওয়াইআই যদি আপনি একক লাইন ব্রেকের সাথে একযোগে মুটি-লাইনব্রেকগুলি প্রতিস্থাপন করতে চান তবে আপনি myString.trim().replaceAll("[\n]{2,}", "\n") কোনও স্থান ব্যবহার করতে বা প্রতিস্থাপন করতে পারেন myString.trim().replaceAll("[\n]{2,}", " ")
সৌরভ চন্দ্র

উত্তর:


435

textআপনার ফলাফলগুলি সেট করতে হবে text.replace():

String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

এটি প্রয়োজনীয় কারণ স্ট্রিংগুলি replaceপরিবর্তনযোগ্য - কলিং আসল স্ট্রিং পরিবর্তন করে না, এটি পরিবর্তিত হয়েছে এমন একটি নতুন ফিরিয়ে দেয়। আপনি যদি ফলাফলটি অর্পণ করেন না text, তবে সেই নতুন স্ট্রিং হারিয়ে গেছে এবং আবর্জনা সংগ্রহ করা হয়েছে।

যে কোনও পরিবেশের জন্য নতুন লাইনের স্ট্রিং পাওয়ার জন্য - যা কল করে পাওয়া যায় System.getProperty("line.separator")


1
+1, সঠিক। কারণ হিসাবে: স্ট্রিং অপরিবর্তনীয়replace()পদ্ধতি ফেরৎ কাঙ্ক্ষিত ফলাফল। এছাড়াও এপিআই ডক্স দেখুন: java.sun.com/javase/6/docs/api/java/lang/... : সম্পাদনা অই আপনি ইতিমধ্যে সম্পাদিত নিজেকে যে পরে মধ্যে :)
BalusC

75
সম্ভবত text = text.replace("\r\n", " ").replace("\n", " ");এটি একটি ভাল সমাধান: অন্যথায় শব্দ একে অপরের সাথে "আঠালো" হবে (একক স্থান প্রতিস্থাপন ছাড়া)।
বার্ট কায়ার্স

9
আপনি যে কোনও ওএসের জন্য সঠিকভাবে নতুন লাইনের সাথে মেলে স্কয়ার বন্ধনী ব্যবহার করতে পারেন:.replaceAll("[\\r\\n]+", "")
ইয়েতি

2
যেহেতু প্রশ্নটি সমস্ত ঘটনাগুলি প্রতিস্থাপনের জন্য জিজ্ঞাসা করছে, সমাধানটি তার চেয়ে বরংtext = text.replaceAll("\n", "").replaceAll("\r", "");
BasZero

2
@ বাসজিরো রিজেক্সে replaceAllনেয়, replaceআক্ষরিক স্ট্রিং নেয়, উভয়ই সমস্ত উপস্থিতি প্রতিস্থাপন করে।
জুনাস ভালি

220

অন্যান্য উত্তরে উল্লিখিত হিসাবে, আপনার কোডটি প্রাথমিকভাবে কাজ করছে না কারণ String.replace(...)লক্ষ্য পরিবর্তন করে না String। (এটি পারে না - জাভা স্ট্রিংগুলি অপরিবর্তনীয়!) replaceআসলে যা হয় তা হল Stringপ্রয়োজন অনুসারে পরিবর্তিত অক্ষরগুলি সহ একটি নতুন অবজেক্ট তৈরি করা এবং ফিরে দেওয়া । তবে আপনার কোডটি তা ছুঁড়ে ফেলেছে String...


এখানে কয়েকটি সম্ভাব্য সমাধান রয়েছে। কোনটি সবচেয়ে সঠিক তা নির্ভর করে আপনি ঠিক কী করার চেষ্টা করছেন তার উপর নির্ভর করে।

// #1
text = text.replace("\n", "");

কেবলমাত্র সমস্ত নিউলাইন অক্ষর মুছে ফেলা হয়। এটি উইন্ডোজ বা ম্যাক লাইন সমাপ্তির সাথে সামঞ্জস্য করে না।

// #2
text = text.replace(System.getProperty("line.separator"), "");

বর্তমান প্ল্যাটফর্মের জন্য সমস্ত লাইন টার্মিনেটর সরান। আপনি উইন্ডোজের কোনও ইউএনআইএক্স ফাইল প্রক্রিয়া করার চেষ্টা করছেন (উদাহরণস্বরূপ) বা তার বিপরীতে আপনি এটি মোকাবিলা করতে পারবেন না।

// #3
text = text.replaceAll("\\r|\\n", "");

সমস্ত উইন্ডোজ, ইউনিক্স বা ম্যাক লাইন টার্মিনেটর সরান s যাইহোক, যদি ইনপুট ফাইলটি পাঠ্য হয় তবে এটি শব্দের সাথে মিলিত হবে; যেমন

Goodbye cruel
world.

হয়ে

Goodbye cruelworld.

সুতরাং আপনি সম্ভবত এটি করতে চাইবেন:

// #4
text = text.replaceAll("\\r\\n|\\r|\\n", " ");

যা প্রতিটি লাইনের টার্মিনেটরকে একটি স্পেস দিয়ে প্রতিস্থাপন করে। জাভা 8 যেহেতু আপনি এটিও করতে পারেন:

// #5
text = text.replaceAll("\\R", " ");

এবং যদি আপনি এক স্থানের সাথে একাধিক লাইন বিভাজক প্রতিস্থাপন করতে চান:

// #6
text = text.replaceAll("\\R+", " ");

এটি একটি দুর্দান্ত উত্তর। জাভা 8 উদাহরণের জন্য কুডোস। সাহায্যের জন্য ধন্যবাদ!
হ্যাঙ্কনেসিপ

22

আপনি যদি বর্তমান ওএসে বৈধ যে কেবল লাইন টার্মিনেটরগুলি সরাতে চান, আপনি এটি করতে পারেন:

text = text.replaceAll(System.getProperty("line.separator"), "");

আপনি যদি কোনও লাইন বিভাজক অপসারণের বিষয়টি নিশ্চিত করতে চান তবে আপনি এটি এটি করতে পারেন:

text = text.replaceAll("\\r|\\n", "");

বা, কিছুটা আরও ভার্বোজ, তবে কম রেজিওকি:

text = text.replaceAll("\\r", "").replaceAll("\\n", "");

2
একসাথে শব্দ আটকানো এড়াতে (যেমন কালেবের উত্তরের মন্তব্যে আলোচিত) রেজেক্স পদ্ধতির পরিবর্তন করা যেতে পারে text.replaceAll("(\\r|\\n)+", " ")এবং (লোভাকে জাভাতে ডিফল্ট বলে ধরে নিচ্ছেন?) নতুন লাইনের অক্ষরের প্রতিটি অনুক্রমের জন্য আপনার কেবলমাত্র একটি জায়গার সাথে সমাধান করতে হবে ।
জর্ন শো-রোড

18

এই ফাংশনটি একক স্পেসে লাইন ব্রেক সহ সমস্ত সাদা স্থানকে স্বাভাবিক করে তোলে। মূল প্রশ্নটি যা চেয়েছিল ঠিক তা নয়, তবে অনেক ক্ষেত্রে যা প্রয়োজন তা হ'ল সম্ভবত:

import org.apache.commons.lang3.StringUtils;

final String cleansedString = StringUtils.normalizeSpace(rawString);

14

আমার ধারণা এটি দক্ষ হবে

String s;
s = "try this\n try me.";
s.replaceAll("[\\r\\n]+", "")

পেস্ট করার সময় "\ n" অক্ষর না হারিয়ে আপনার ঠিক একই কোড রয়েছে তা নিশ্চিত করুন। কারণ এটি কাজ করা উচিত। হতে পারে কারণ আমি শেষ সেমিকোলনটি (;) শেষে ভুলে গেছি।
JSBach

11
str = str.replaceAll("\\r\\n|\\r|\\n", " ");

প্রতিটি অন্যান্য লাইনে ব্যর্থ হয়ে অনেক অনুসন্ধান করার পরে আমার জন্য নিখুঁতভাবে কাজ করেছেন।


6

উইন্ডোজ / লিনাক্স / ম্যাকের নিচে লাইনব্রেকগুলি একই নয়। আপনার line.separator বৈশিষ্ট্য সহ System.getProperties ব্যবহার করা উচিত ।


3
String text = readFileAsString("textfile.txt").replace("\n","");

.replace নতুন স্ট্রিং দেয়, জাভাতে স্ট্রিংগুলি অপরিবর্তনীয়।


3

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

অত: পর:

BufferedReader br = new BufferedReader(
    new InputStreamReader("textfile.txt"));
StringBuilder sb = new StringBuilder();
for (;;) {
    String line = br.readLine();
    if (line == null)
        break;
    sb.append(line);
    sb.append(' ');   // SEE BELOW
}
String text = sb.toString();

নোট করুন যে readLine()ফেরত স্ট্রিংয়ে লাইন টার্মিনেটর অন্তর্ভুক্ত করে না। উপরের কোডটি একটি লাইনের শেষ শব্দ এবং পরের লাইনের প্রথম শব্দটিকে একসাথে আটকানো এড়াতে একটি স্থান যুক্ত করে।


3
String text = readFileAsString("textfile.txt").replaceAll("\n", "");

যদিও ওরাকল ওয়েবসাইটে ট্রিম () এর সংজ্ঞাটি "স্ট্রিংয়ের একটি অনুলিপি প্রদান করে, শীর্ষস্থানীয় এবং পিছনের সাদা অংশ বাদ দিয়ে Return"

ডকুমেন্টেশনটি বলার জন্য বাদ দেয় যে নতুন লাইন অক্ষর (শীর্ষস্থানীয় এবং অনুসরণযোগ্য) এছাড়াও সরানো হবে।

সংক্ষেপে String text = readFileAsString("textfile.txt").trim();আপনার জন্য কাজ করবে। (জাভা 6 সহ যাচাই করা হয়েছে)


1

আমার কাছে এটি অদ্ভুত বলে মনে হচ্ছে যে (অ্যাপাচি) স্ট্রিং ইউটিলগুলি এখনও এখানে covered াকা হয়নি।

আপনি .replaceপদ্ধতিটি ব্যবহার করে স্ট্রিং থেকে সমস্ত নিউলাইনগুলি (বা সেই বিষয়ে কোনও স্ট্রিংয়ের অন্য কোনও ঘটনা) সরিয়ে ফেলতে পারেন

StringUtils.replace(myString, "\n", "");

এই লাইনটি খালি স্ট্রিংয়ের সাথে সমস্ত নিউলাইনকে প্রতিস্থাপন করবে।

কারণ নিউলাইন প্রযুক্তিগতভাবে একটি অক্ষর আপনি optionচ্ছিকভাবে এমন .replaceCharsপদ্ধতি ব্যবহার করতে পারেন যা অক্ষরগুলি প্রতিস্থাপন করবে

StringUtils.replaceChars(myString, '\n', '');

StringUtils.replaceEachRepeatedly(myString, new String[]{"\n", "\t"}, new String[]{StringUtils.Empty, StringUtils.Empty});
লুকাস ক্রফোর্ড

0

এফওয়াইআই যদি আপনি একক লাইন বিরতির সাথে এক সাথে মুটি-লাইনব্রেকগুলি প্রতিস্থাপন করতে চান তবে আপনি ব্যবহার করতে পারেন

myString.trim().replaceAll("[\n]{2,}", "\n")

অথবা একটি একক স্থান দিয়ে প্রতিস্থাপন করুন

myString.trim().replaceAll("[\n]{2,}", " ")

0

আপনি লাইনটি দিয়ে পুনরাবৃত্তি করতে এবং প্রতিটি লাইনে স্ট্রিংবিল্ডারে সংযোজন করতে অ্যাপাচি কমন্স আইইউটিস ব্যবহার করতে পারেন। এবং ইনপুটস্ট্রিমটি বন্ধ করতে ভুলবেন না

StringBuilder sb = new StringBuilder();
FileInputStream fin=new FileInputStream("textfile.txt");
LineIterator lt=IOUtils.lineIterator(fin, "utf-8");
while(lt.hasNext())
{
  sb.append(lt.nextLine());
}
String text = sb.toString();
IOUtils.closeQuitely(fin);

0

যেকোন চরের সাথে কোনও চরটি প্রতিস্থাপন করতে আপনি জেনেরিক পদ্ধতি ব্যবহার করতে পারেন।

public static void removeWithAnyChar(String str, char replceChar,
        char replaceWith) {
    char chrs[] = str.toCharArray();
    int i = 0;
    while (i < chrs.length) {

        if (chrs[i] == replceChar) {
            chrs[i] = replaceWith;
        }
        i++;
    }

}


-2

এটি করার চেষ্টা করুন:

 textValue= textValue.replaceAll("\n", "");
 textValue= textValue.replaceAll("\t", "");
 textValue= textValue.replaceAll("\\n", "");
 textValue= textValue.replaceAll("\\t", "");
 textValue= textValue.replaceAll("\r", "");
 textValue= textValue.replaceAll("\\r", "");
 textValue= textValue.replaceAll("\r\n", "");
 textValue= textValue.replaceAll("\\r\\n", "");

5
যদি আপনি প্রতিস্থাপন \nকরেন \r\nতবে replace n প্রতিস্থাপন করলে আর কিছুই নেই এবং there n থাকলে এটি প্রতিস্থাপন করা হবে তাই কেবল only থাকবে \
রব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.