জাভাতে বিভাজক ছাড়াই আমি কীভাবে একটি দীর্ঘ পূর্ণসংখ্যাকে স্ট্রিং হিসাবে ফর্ম্যাট করব?


122

সাধারণ প্রশ্ন, তবে আমি বাজি ধরব যে ডকুমেন্টেশন বোঝার চেষ্টা করার চেয়ে এখানে জিজ্ঞাসা করা সম্ভবত আরও সোজা এগিয়ে থাকবে MessageFormat:

long foo = 12345;
String s = MessageFormat.format("{0}", foo);

পর্যবেক্ষণকৃত মান "12,345"।

পছন্দসই মান "12345"।

উত্তর:


62

শুধু ব্যবহার Long.toString(long foo)


12
বাString.valueOf(long)
আরএসপি 2109

6
স্ট্রিং.ভেলুওফ () লং.টোস্ট্রিং () কল করেছে
পিটার

7
হতে পারে এটি ক্ষুদ্র হয় তবে এক্ষেত্রে আপনি Long.toString (foo) এর একটি অননুমোদিত আচরণের উপর নির্ভর করছেন। যে কারণে, আমি ড্যানিয়েল ফোর্টুনভের উত্তর পছন্দ করি।
জন কে

4
এটি নিঃসংশ্লিষ্ট নয়। দেখুন download.oracle.com/javase/6/docs/api/java/lang/...
রব এইচ

3
ঠিক আছে, তবে এই সমাধানটি রিসোর্সবাণ্ডলে বার্তা বিন্যাসে প্রযোজ্য নয়। টুটো আই 18 এন
গিলাইম হুস্তা

332
MessageFormat.format("{0,number,#}", foo);

1
ধন্যবাদ, আমি বার্তা ফর্ম্যাট বৈশিষ্ট্য ইনজেকশন দিয়ে এটি করার চেষ্টা করছিলাম। ভাল জিনিস এটি করার একাধিক উপায় আছে!
ফিলিহপ ব্যসবি

3
আমি এইভাবে পছন্দ করি যেহেতু এটি আমাকে আমার ভাষার বৈশিষ্ট্য ফাইলের ফর্ম্যাটটি পরিবর্তন করতে দেয়।
পাস্কল

2
নিখুঁত সমাধান! কোড স্তরের পরিবর্তে রেফারেন্স ডেটাতে ফর্ম্যাট / অপরিবর্তনীয় বিকল্পটি রাখতে আমাকে সহায়তা করেছে - ধন্যবাদ! এবং @ সেবাস্তিয়ানআরথ যেমন বলেছিলেন - এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ছিল।
ওফার ল্যান্ডো

9
আমি সত্যিই অবাক হলাম কেন সংখ্যার স্ট্রিংগুলি সুন্দর করে ডিফল্ট এবং ফর্ম্যাটার এপিআই দিয়ে কোনও স্পষ্ট জিনিস নয়
humblerookie

1
আপনি যদি প্যাটার্নটি উদ্ধৃত করেন তবে এটি একটি পছন্দ বিন্যাসের অভ্যন্তরেও কাজ করে:MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
0

1

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

কীভাবে এটি করা যায় তার উদাহরণ এখানে রয়েছে:

    MessageFormat fmt = new MessageFormat("{0,choice,0#zero!|1#one!|1<{0,number,'#'}|10000<big: {0}}");

    int[] nums = new int[] {
            0,
            1,
            100,
            1000,
            10000,
            100000,
            1000000,
            10000000
    };

    Object[] a = new Object[1];
    for(int num : nums) {
        a[0] = num;
        System.out.println(fmt.format(a));
    }

এটি নিম্নলিখিত আউটপুট উত্পন্ন করে; আমি আশা করি এটি অন্যদের জন্য সহায়ক যারা একই ধরণের জিনিস সম্পাদন করার চেষ্টা করছেন:

zero!
one!
100
1000
10000
big: 100,000
big: 1,000,000
big: 10,000,000

আপনি দেখতে পাচ্ছেন, "পছন্দ" ফর্ম্যাটটি আমাদের ফর্ম্যাট করার মানটি পাস-ইন হওয়ার উপর নির্ভর করে ব্যবহারের জন্য যে ধরণের বিন্যাসটি বেছে নিতে দেয় তা চয়ন করতে দেয়। ছোট সংখ্যা পাঠ্যের সাহায্যে প্রতিস্থাপিত হতে পারে (মূল মানের কোনও প্রদর্শন নয়)। মাঝারি আকারের সংখ্যাগুলি কোনও গ্রুপিং বিভাজনকারী (কমা নেই) দিয়ে দেখানো হয়। বৃহত্তম সংখ্যার মধ্যে আবার কমা অন্তর্ভুক্ত রয়েছে। স্পষ্টতই, এর নমনীয়তা প্রদর্শনের জন্য এটি সম্পূর্ণরূপে স্বীকৃত উদাহরণ java.text.MessageFormat

#ফর্ম্যাট পাঠ্যে উদ্ধৃত হওয়া সম্পর্কে একটি নোট : যেহেতু উভয়ই ChoiceFormatএবং MessageFormatব্যবহৃত হচ্ছে, উভয়ের মধ্যে মেটাচার্যাক্টারের মধ্যে একটি সংঘর্ষ রয়েছে। ChoiceFormatব্যবহারসমূহ #একটি metacharacter যে মূলত মানে হলো "সমান" হিসাবে যাতে বিন্যাস ইঞ্জিন ক্ষেত্রে যে যেমন জানেন 1#one!আমরা তুলনা করা হয় {0}সঙ্গে 1, এবং যদি তারা সমান হয়, এটা সেই নির্দিষ্ট "পছন্দ" ব্যবহার করে।

তবে #এর অন্য অর্থ রয়েছে MessageFormatএবং এটি একটি মেটাচার্যাক্টর হিসাবে যার অর্থ রয়েছে DecimalFormat: এটি একটি মেটাচার্যাক্টারের অর্থ যার অর্থ "এখানে একটি সংখ্যা রাখুন"।

এটি একটি ChoiceFormatস্ট্রিংয়ে আবৃত হওয়ার কারণে , #উদ্ধৃতি দেওয়া দরকার। যখন ChoiceFormatস্ট্রিং পার্স করা হয়, ঐ কোট কখন subformats ক্ষণস্থায়ী সরিয়ে ফেলা হয় MessageFormat(এবং তারপর উপর DecimalFormat)।

সুতরাং আপনি যখন ব্যবহার করছেন {0,choice,...}, আপনাকে সেই #অক্ষরগুলি, এবং সম্ভবত অন্যদের উদ্ধৃতি দিতে হবে ।


0

সবচেয়ে সংক্ষিপ্ততম উপায়

long foo = 12345;
String s = ""+foo;

3
এবং, সর্বদা হিসাবে, এটি প্রসারিত হয় new StringBuilder("").append(foo).toString()যাতে এটি সর্বোত্তম নয়।
রেন্ডারস 00

1
@ রেন্ডারস00 একটি সংখ্যাকে একক স্ট্রিংয়ে রূপান্তর করা সর্বাধিক অনুকূল বিকল্প হওয়ার সম্ভাবনা নেই, আপনি সাধারণত এটি সম্পূর্ণরূপে এড়াতে পারবেন সেই প্রসঙ্গে নির্ভর করে, তবে সবচেয়ে সাধারণ প্যাটার্নের জন্য আপনি ব্যবহার করতে পারেন""+
পিটার লরে

1
আপনি ঠিকই বলেছেন, তবে আমি কেবল এটিই নির্দেশ করতে চেয়েছিলাম যেহেতু লোকেরা সর্বদা এটি দেখায়।
রেন্ডারস00

1
@ RANDers00 বিটিডাব্লু একটি বার্তা ফর্ম্যাট ব্যবহার করে আরও ব্যয়বহুল এবং এই ক্ষেত্রে আরও জটিল আকারের ক্রম।
পিটার লরে

হ্যাঁ, এর পরিবর্তে একটি ব্যবহার করা উচিত Long.toString()যেহেতু এই সমাধানটি যেভাবেই পটভূমিতে ব্যবহার করে :)
RANDers00


-6

আপনি চেষ্টা করতে পারেন:

String s = new Long(foo).toString();

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