আমি কোনও স্ট্রিং থেকে ডাবল উদ্ধৃতি প্রারম্ভিক এবং শেষ করে কীভাবে ট্রিম করব?


139

আমি একটি স্ট্রিং থেকে একটি শুরু এবং শেষ ডাবল উদ্ধৃতি (") ট্রিম করতে চাই
Java জাভাতে আমি কীভাবে এটি অর্জন করতে পারি? ধন্যবাদ!


1
স্ট্রিংটির চারপাশে ইতিমধ্যে উক্তি রয়েছে বলে জানা গেছে, বা উদ্ধৃতিগুলির জন্য অনুসন্ধান করা সমস্যার একটি অংশ?
মাইকেল ময়র্স

উত্তর:


250

আপনি String#replaceAll()এটির জন্য একটি প্যাটার্ন দিয়ে ব্যবহার করতে পারেন ^\"|\"$

যেমন

string = string.replaceAll("^\"|\"$", "");

নিয়মিত এক্সপ্রেশন সম্পর্কে আরও জানতে, http://regular-expression.info এ আল uk করুন ।

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


6
আপনি কি মনে করেন না এটি খালি স্ট্রিংয়ের সাথে ডাবল কোটগুলির সমস্ত উপস্থিতিকে পরিবর্তে প্রথম এবং শেষের স্থানে নিয়ে যাবে।
গুরুকুল্কি

1
@ ইউফ্ক: এটি কোনও জটিল রেজেেক্স নয়। আপনি অন্যথায় একটি গুচ্ছ সঙ্গে ঝগড়া করতে পারেন String#indexOf(), String#substring(), পদ্ধতি ইত্যাদি। এটি কেবলমাত্র একটি সামান্য বাচ্চা দ্রুত, তবে এটি আরও অনেক বেশি কোড। @ জি কে: উহ, আপনি কি রেজেক্সটি পড়ে / বুঝতে পেরেছেন বা পরীক্ষা করেছেন?
বালুসসি

11
@ জি কে ক্যারেটটি অনুসন্ধান করা স্ট্রিংয়ের শুরুতে প্রতিনিধিত্ব করে এবং ডলারের চিহ্নটি এর সমাপ্তি উপস্থাপন করে। এখানে ব্যাকস্ল্যাশ নীচের উদ্ধৃতিটিকে "পলায়ন" করতে পারে যাতে এটি কেবল একটি চরিত্র হিসাবে বিবেচিত হয়। সুতরাং এই রেজেক্স বলেছে, শুরুর কোটের সমস্ত উপস্থিতি প্রতিস্থাপন করুন, বা শেষে শূন্য স্ট্রিং দিয়ে উদ্ধৃতি দিন। অনুরোধ হিসাবে।
কার্ল ম্যানাস্টার

2
@ মার্ক: আমি নিশ্চিত নই যে প্রশ্নটি তার বর্তমান আকারে বিবেচনা করে কীভাবে সমস্যা হয়েছে।
বালুসসি

8
এখানে Regex ভেঙ্গে হল: ^\"|\"$|"বা" এর অর্থ। এটা এইভাবে পারেন ম্যাচ হবে ^\"বা \"$^স্ট্রিংয়ের সূচনা এবং স্ট্রিংয়ের $শেষের সাথে মিল। ^\"মানে স্ট্রিংয়ের শুরুতে \"$একটি উদ্ধৃতিটি মিলবে এবং স্ট্রিংয়ের শেষে একটি উদ্ধৃতিটির সাথে মেলে।
ইবিজামান

31

স্ট্রিং থেকে প্রথম অক্ষর এবং শেষ অক্ষরটি সরাতে, ব্যবহার করুন:

myString = myString.substring(1, myString.length()-1);

18
এটি কেবলমাত্র প্রয়োজন যে উদ্ধৃতি উচিত নিশ্চিত উপস্থিত থাকা। যদি কোনও গ্যারান্টি না থাকে তবে আপনার আগে এটি পরীক্ষা করা দরকার।
বালুসসি

4
@ বালুসসি: অবশ্যই। আমার প্রশ্নটি পড়া থেকে মনে হয়, স্ট্রিংটির চারপাশে উদ্ধৃতি রয়েছে বলে জানা গেছে।
মাইকেল ময়র্স

। দৈর্ঘ্য একটি সম্পত্তি যা কোনও ক্রিয়াকলাপ নয়
মার্টিন

2
@ মার্টিন:। দৈর্ঘ্য অ্যারেগুলির একটি সম্পত্তি, তবে। দৈর্ঘ্য () স্ট্রিংয়ের একটি পদ্ধতি।
মাইকেল মায়ার্স

@ মিশেলমায়ারস: ওফ, দুঃখিত আমি মানসিক জাভাস্ক্রিপ্ট মোডে ছিলাম। আমার ভুল.
মার্টিন

16

অ্যাপাচি সহ StringUtils.strip():

 StringUtils.strip(null, *)          = null
 StringUtils.strip("", *)            = ""
 StringUtils.strip("abc", null)      = "abc"
 StringUtils.strip("  abc", null)    = "abc"
 StringUtils.strip("abc  ", null)    = "abc"
 StringUtils.strip(" abc ", null)    = "abc"
 StringUtils.strip("  abcyx", "xyz") = "  abc"

সুতরাং,

final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more

এই পদ্ধতিটি আমার উদাহরণ হিসাবে দেখানো হিসাবে উদ্ধৃত এবং উদ্ধৃত স্ট্রিং উভয়ই কাজ করে। একমাত্র নেতিবাচক দিকটি হ'ল, এটি কঠোরভাবে মিলে যাওয়া উক্তিগুলি অনুসন্ধান করবে না , কেবলমাত্র শীর্ষস্থানীয় এবং অনুগামী উদ্ধৃতি অক্ষরগুলি (অর্থাত্: "partiallyএবং "fully"উদ্ধৃত স্ট্রিংগুলির মধ্যে কোনও পার্থক্য নেই )।


13

যদি ডাবল উদ্ধৃতিগুলি কেবল শুরু এবং শেষের দিকে উপস্থিত থাকে তবে এটির মতো একটি সাধারণ কোড নিখুঁতভাবে কাজ করবে:

string = string.replace("\"", "");


13

কোনও স্ট্রিংয়ের শুরু এবং শেষ থেকে ডাবল উদ্ধৃতিগুলি সরিয়ে ফেলার জন্য এটি আমার সেরা উপায়।

someString.replace (/(^")|("$)/g, '')

2
হতে পারে একক উদ্ধৃতিগুলিও প্রতিস্থাপন করুন (/ (^ \ "| \ ') | (\" | \' $) / জি, ""));
বব

11

পেয়ারা ব্যবহার করে আপনি আরও মার্জিতভাবে লিখতে পারেন CharMatcher.is('\"').trimFrom(mystring);


2
শুধুমাত্র একক চরিত্রটি ছাঁটাই করা কি সম্ভব? উদাহরণস্বরূপ, যদি আমার স্ট্রিং দুটি সিঙ্গল কোট দিয়ে শেষ হয় তবে আমি কেবল একক উদ্ধৃতি ছাঁটাই করতে চাই।
ভটসাল মেভাদা

10

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

if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
    string = string.substring(1, string.length() - 1);
}

এটি परिमाणের আদেশের দ্বারা সর্বাধিক পারফরম্যান্স উত্তর এবং এটি উদ্ধৃতিগুলির alচ্ছিক বা উপস্থিতি সম্পর্কে কী করা উচিত তাও নির্দিষ্ট করে।
এন্টোনিও

6

Kotlin

কোটলিনে আপনি স্ট্রিং.রেমোভসুরাউন্ডিং (ডিলিমিটার: চারসেকেন্স) ব্যবহার করতে পারেন

যেমন

string.removeSurrounding("\"")

এই স্ট্রিংটির শুরু এবং শেষ উভয় থেকেই প্রদত্ত ডিলিমিটার স্ট্রিং সরিয়ে দেয় এবং কেবল যদি এটি শুরু হয় এবং ডিলিমিটার দিয়ে শেষ হয় । অন্যথায় এই স্ট্রিংটি অপরিবর্তিত রেখে দেয়।

উত্স কোডটি এর মতো দেখাচ্ছে:

public fun String.removeSurrounding(delimiter: CharSequence): String = removeSurrounding(delimiter, delimiter)

public fun String.removeSurrounding(prefix: CharSequence, suffix: CharSequence): String {
    if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {
        return substring(prefix.length, length - suffix.length)
    }
    return this
}

অন্যান্য শত শত প্রোগ্রামিং ভাষা রয়েছে। আপনি কোটলিনের জন্য উত্তরটি সরবরাহ করেছেন এবং অন্যদের জন্য নয় :-)?
নিকোলে.লাপতেভ 25'19

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

1
এই একক উত্তরটি আপনার বিদ্যমান জাভা কোডবেসে কোটলিন গ্রহণের পুরো বিষয়টি তুলে ধরেছে!
কিরিল গ্রোশকভ

3

নীচের প্যাটার্নটি যখন ব্যবহার করা java.util.regex.Matcherহবে তখন স্ট্রিংয়ের ভিতরে ডাবল কোটের ঘটনাগুলি প্রভাবিত না করে ডাবল কোটের মধ্যে যে কোনও স্ট্রিং মেলে:

"[^\"][\\p{Print}]*[^\"]"

2

@ ব্রকলোর উত্তরটি কিছুটা পরিবর্তন করা হচ্ছে

if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
    string = string.substring(1, string.length() - 1);
}

আমি ভাবব যে পদ্ধতির যুক্তিটি দিয়ে এনারেট @NonNullকরা উচিত এবং এর Objects.requireNonNull(string)ভিতরে এটির মতো সম্ভবত কিছু হওয়া উচিত কারণ যদি কেউ স্ট্রিপকোটিসকে (নাল) কল দিচ্ছে তবে তারা ভুল করে সম্ভবত এটি করছে!
brcolow

2

scala

s.stripPrefix("\"").stripSuffix("\"")

স্ট্রিংটির শুরুতে এবং / অথবা শেষে কোট রয়েছে কি না তা নির্বিশেষে এটি কাজ করে।

সম্পাদনা: দুঃখিত, স্কেল কেবল


2

সম্পাদিত: কেবল উপলব্ধি করেছিলাম যে আমার উল্লেখ করা উচিত যে এগুলি কেবল তখনই দু'জনের বিদ্যমান থাকলেই কাজ করে। অন্যথায় স্ট্রিংটি উদ্ধৃত হিসাবে বিবেচনা করা হয় না। সিএসভি ফাইলগুলির সাথে কাজ করার সময় এই জাতীয় দৃশ্যটি আমার কাছে উপস্থিত হয়েছিল।

org.apache.commons.lang3.StringUtils.unwrap("\"abc\"", "\"")    = "abc"
org.apache.commons.lang3.StringUtils.unwrap("\"abc", "\"")    = "\"abc"
org.apache.commons.lang3.StringUtils.unwrap("abc\"", "\"")    = "abc\""

1
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
    strUnquoted = m.group(1);
}

1
private static String removeQuotesFromStartAndEndOfString(String inputStr) {
    String result = inputStr;
    int firstQuote = inputStr.indexOf('\"');
    int lastQuote = result.lastIndexOf('\"');
    int strLength = inputStr.length();
    if (firstQuote == 0 && lastQuote == strLength - 1) {
        result = result.substring(1, strLength - 1);
    }
    return result;
}

1

জাভাতে স্ট্রিংয়ের শুরু এবং শেষ থেকে এক বা একাধিক ডাবল উদ্ধৃতিগুলি সরাতে আপনার একটি রেজেক্স ভিত্তিক সমাধান ব্যবহার করতে হবে:

String result = input_str.replaceAll("^\"+|\"+$", "");

আপনার যদি প্রয়োজন হয় একক উদ্ধৃতিও:

String result = input_str.replaceAll("^[\"']+|[\"']+$", "");

দ্রষ্টব্য : যদি আপনার স্ট্রিংয়ের "ভিতরে থাকে তবে এই পদ্ধতির ফলে সমস্যা হতে পারে (যেমন "Name": "John"=> Name": "John)।

একটি জাভা ডেমো এখানে দেখুন :

String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string

0

প্রতিটি ডাবল উদ্ধৃতিগুলির সূচীগুলি সন্ধান করুন এবং সেখানে একটি খালি স্ট্রিং .োকান।


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