জাভা স্ট্রিং সমস্ত সংখ্যক অক্ষর মুছে ফেলে


237

0-9 এবং একটি পিরিয়ড নয় এমন সমস্ত অক্ষর এবং অক্ষর মুছে ফেলার চেষ্টা করছেন। আমি ব্যবহার করছি Character.isDigit()তবে এটি দশমিকও সরিয়ে দেয়, আমি কীভাবে দশমিক রাখব?


4
[myStr = myStr.replaceAll ( "[^ \\ ঘ]", "")] [1] [1]: stackoverflow.com/questions/1533659/...
বিটম্যাপ

2
এটি বলার জন্য এটি একটি অদ্ভুত উপায়। "0-9 নয় এমন সমস্ত অক্ষর এবং অক্ষর" এবং "পিরিয়ড" সরল "সমস্ত অক্ষর যা 0-9 নয় এবং একটি পিরিয়ড নয়? মানে, অক্ষরগুলি এমন একটি অক্ষর যা 0-9 বা সময়কাল নয়।
আদম জালকম্যান

উত্তর:


521

এই কোড ব্যবহার করে দেখুন:

String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");

এখন strথাকবে "12.334.78"


18
এটি এছাড়াও কাজ করতে পারে:> str = str.replaceAll ("[\\ ডি।]", "");
ইয়াআআআহহহহ..হ্যামফ হামফ

1
@ এসকার লোপেজ: নেতিবাচক সংখ্যাও কীভাবে অন্তর্ভুক্ত করবেন? আমি বলতে চাইছি, আমাকে খালি জায়গার সাথে ধনাত্মক / negativeণাত্মক সংখ্যা নয় এমন সমস্ত কিছু প্রতিস্থাপন করতে হবে। কিভাবে যে কি?
পঙ্কজ সিংহল

3
@ পঙ্কজসিংহল কেবল রেজিজেটে বিয়োগ চিহ্নটি অন্তর্ভুক্ত করেছেন:[^\\d.-]
এসকর লোপেজ

3
@ ইয়াআআআহহহহ..হ্যামফামফ না, এটি কাজ করবে না। আমাদের পুরো গোষ্ঠীটিকে (সংখ্যা এবং বিন্দু সহ) উপেক্ষা করতে হবে, আপনার প্রস্তাবিত কোডটি কেবলমাত্র সংখ্যাগুলিকে অগ্রাহ্য করবে এবং ফলস্বরূপ বিন্দুগুলি অন্তর্ভুক্ত করা হবে না, প্রয়োজনীয় হিসাবে। আপনি এটি পরীক্ষা করেছেন? উপরের নমুনা কোডটি ব্যবহার করে আপনার কোডটি ফেরত দেয় "1233478"যা ভুল which
অস্কার লোপেজ

এমনকি অ্যান্ড্রয়েডেও খুব ভাল কাজ করে। ধন্যবাদ।
juanram0n

98

আমি একটি রেজেক্স ব্যবহার করব

String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);

কপি করে প্রিন্ট

2367.2723

আপনি -নেতিবাচক সংখ্যার জন্য পাশাপাশি রাখতে পছন্দ করতে পারেন ।


আপনার regexp এ বিন্দু থেকে বাঁচা উচিত নয়।
অ্যাডাম জালকম্যান

আপনি কি দয়া করে এই বিবৃতিটির অর্থ ^এবং এর .অর্থ সম্পর্কে কিছু ব্যাখ্যা দিতে পারেন ?
মনসুর ফাহাদ

1
একটি Regex সালে @MansourFahad [^এই অক্ষরগুলি উপায়ে এবং না একটি ভিতরে []একটি .মাত্র হল.
পিটার Lawrey

1
যেহেতু একটি .কেবল একটি aএবং কোনও অর্থই বোঝায় না, আমি কী কেবল তা থেকে মুক্তি পেতে পারি?
মনসুর ফাহাদ

@ মনসুরফাহাদ কেবলমাত্র যদি আপনি .নিজের ফলাফলটি না চান ।
পদ্ধতিতে স্বাক্ষরিত

44
String phoneNumberstr = "Tel: 00971-557890-999";
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", "");

ফলাফল: 0097-557890-999

আপনার যদি স্ট্রিংয়েও "-" প্রয়োজন না হয় আপনি এটি এর মতো করতে পারেন:

String phoneNumberstr = "Tel: 00971-55 7890 999";      
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");

ফলাফল: 0097557890999


মহান উত্তরের জন্য ধন্যবাদ !! r
শ্রীদত্ত কোঠারি

20

পেয়ারা সহ:

String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);

দেখতে http://code.google.com/p/guava-libraries/wiki/StringsExplained


1
পৃথিবীতে এত সহজ এবং প্রয়োজনীয় কাজের জন্য আপনার পেয়ারার দরকার পড়বে কেন ?!
egorikem

@ ইগোরিকেম যদি আপনার প্রকল্পটি ইতিমধ্যে পেয়ারা ব্যবহার করে চলেছে, আপনি এটি কোনও অতিরিক্ত ব্যয়ে ব্যবহার করতে পারেন ..
স্টান

19
str = str.replaceAll("\\D+","");

ডুনো কেন লোকেরা আপনার সমাধানটিকে হ্রাস করেছে ... আমাকে অনেক সাহায্য করেছে, ধন্যবাদ! ভোট!
জারিয়াল

ধন্যবাদ জেরিয়াল, আমি দেখতে পাচ্ছি রবার্ট আসলে আমার উত্তরটি str = str.replaceAll ("\ D +", "") থেকে সম্পাদনা করেছে; to str = str.replaceAll ("\\ D +", ""); ... সুতরাং স্ট্যাকোর সম্পাদক বাক্সে জিনিস আটকে দেওয়ার সময় আমি এই ভুলটি করেছি। তাই ফিক্সিংয়ের জন্য রবার্টকে ধন্যবাদ। এখন এটা কাজ করছে!
Angoranator777

এটি হ্রাস কারণ এটি একটি পুনরায় পোস্ট। ঠিক একই উত্তর ইতিমধ্যে 5 বছর আগে সাবলেট করা হয়েছে !! উপরে দেখুন: stackoverflow.com/a/10372905/704246
সাদ Benbouzid

@ সাদবেনবাউজিদ হাহ? সঠিক একই উত্তর আপনার সংজ্ঞা কি?
বরিস ত্রেখভভ

2
@ স্যাডবেনবিউজিড ১) যা মন্তব্য এবং একটি উত্তর নয় ২) যা সম্পূর্ণ আলাদা রেজেেক্স 3) যে সমস্ত উত্তর রেইগেক্স ডি ব্যবহার করে তা একইরকম নয় যে সমস্ত সি ভাষার উত্তর যা ব্যবহার করে printf()তা সদৃশ like এছাড়াও যদি আপনি মন্তব্যে কোনও উত্তর দেখতে পান তবে আপনি এটিকে একটি উত্তরে রূপান্তর করতে বা এমনকি নিজের নিজের একটি উত্তর যুক্ত করতে মোডকে বলতে পারেন - মন্তব্যে উত্তরগুলি স্ট্যাকওভারলোতে নিরুৎসাহিত করা হয়।
বরিস ত্রেখভভ

6

Regex ব্যবহার না করে সহজ উপায়:

বিন্দুর জন্য অতিরিক্ত চরিত্রের চেক যুক্ত করা '.'প্রয়োজনীয়তার সমাধান করবে:

public static String getOnlyNumerics(String str) {
    if (str == null) {
        return null;
    }
    StringBuffer strBuff = new StringBuffer();
    char c;
    for (int i = 0; i < str.length() ; i++) {
        c = str.charAt(i);
        if (Character.isDigit(c) || c == '.') {
            strBuff.append(c);
        }
    }
    return strBuff.toString();
}

3

এটি জাভা 8 স্ট্রিমের সাথে প্রতিস্থাপনের একটি উপায়:

public static void main(String[] args) throws IOException
{
    String test = "ab19198zxncvl1308j10923.";
    StringBuilder result = new StringBuilder();

    test.chars().mapToObj( i-> (char)i ).filter( c -> Character.isDigit(c) || c == '.' ).forEach( c -> result.append(c) );

    System.out.println( result ); //returns 19198.130810923.
}

3

মুদ্রার দশমিক বিভাজক লোকেলের থেকে অন্যের থেকে আলাদা হতে পারে। .সর্বদা বিভাজক হিসাবে বিবেচনা করা বিপজ্জনক হতে পারে । অর্থাত

╔════════════════╦═══════════════════╗
    Currency          Sample       
╠════════════════╬═══════════════════╣
 USA             $1,222,333.44 USD 
 United Kingdom  £1.222.333,44 GBP 
 European        1.333.333,44 EUR 
╚════════════════╩═══════════════════╝

আমি মনে করি সঠিক উপায়টি হ'ল:

  • DecimalFormatSymbolsডিফল্ট লোকাল বা নির্দিষ্ট একটি দ্বারা দশমিক অক্ষর পান ।
  • শুধুমাত্র অঙ্কগুলি পেতে ডেসিমেল অক্ষরের সাথে রেজেক্স প্যাটার্ন রান্না করুন

এবং এখানে আমি কীভাবে এটি সমাধান করছি:

import java.text.DecimalFormatSymbols;
import java.util.Locale;

কোড:

    public static String getDigit(String quote, Locale locale) {
    char decimalSeparator;
    if (locale == null) {
        decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
    } else {
        decimalSeparator = new DecimalFormatSymbols(locale).getDecimalSeparator();
    }

    String regex = "[^0-9" + decimalSeparator + "]";
    String valueOnlyDigit = quote.replaceAll(regex, "");
    try {
        return valueOnlyDigit;
    } catch (ArithmeticException | NumberFormatException e) {
        Log.e(TAG, "Error in getMoneyAsDecimal", e);
        return null;
    }
    return null;
}

আমি আশা করি এটি সাহায্য করতে পারে, '।


3

কোটলিনের জন্য এখানে আসা অ্যান্ড্রয়েড লোকেরা

val dirtyString = "💰 Account Balance: $-12,345.67"
val cleanString = dirtyString.replace("[^\\d.]".toRegex(), "")

আউটপুট:

cleanString = "12345.67"

এটি তখন নিরাপদে রূপান্তরিত হতে পারে toDouble(), toFloat()অথবা toInt()প্রয়োজনে


বা সংখ্যা, খাঁটি জাভাতে।
অ্যালেক্স বাইথ

1

এটি নাল ইনপুট, নেতিবাচক সংখ্যা এবং দশমিকগুলি পরিচালনা করে (আপনার প্রকল্পে আপনাকে অ্যাপাচি কমন্স ল্যাং লাইব্রেরি, সংস্করণ 3.8 বা উচ্চতর অন্তর্ভুক্ত করতে হবে):

import org.apache.commons.lang3.RegExUtils;
result = RegExUtils.removeAll(input, "-?[^\\d.]");

গ্রন্থাগার উল্লেখ: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html

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