জাভাতে স্ট্রিংগুলি কীভাবে বিন্যাস করবেন


184

আদিম প্রশ্ন, তবে আমি এর মতো স্ট্রিংগুলিকে কীভাবে বিন্যাস করব:

"{2} এর পদক্ষেপ {1}"

জাভা ব্যবহার করে ভেরিয়েবল প্রতিস্থাপন করে? সি # তে এটি সহজ।



উত্তর:


140

স্ট্রিং.ফর্ম্যাট ছাড়াও একবার দেখুন java.text.MessageFormat। ফর্ম্যাটটি কম পরিশ্রুত এবং আপনার দেওয়া সি # উদাহরণের কিছুটা কাছে এবং আপনি এটি পার্সিংয়ের জন্যও ব্যবহার করতে পারেন।

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

int someNumber = 42;
String someString = "foobar";
Object[] args = {new Long(someNumber), someString};
MessageFormat fmt = new MessageFormat("String is \"{1}\", number is {0}.");
System.out.println(fmt.format(args));

একটি সুন্দর উদাহরণ জাভা 1.5 তে ভারার্গস এবং অটোবক্সিং উন্নতির সুবিধা গ্রহণ করে এবং উপরেরটিকে একটি লাইনারে পরিণত করে:

MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");

MessageFormatপছন্দের সংশোধকটির সাথে আই 18nized বহুবচন করার জন্য কিছুটা ভাল n কোনও ভেরিয়েবল 1 এবং অন্যথায় বহুবচন হলে সঠিকভাবে একক রূপটি ব্যবহার করে এমন কোনও বার্তা নির্দিষ্ট করতে আপনি এই জাতীয় কিছু করতে পারেন:

String formatString = "there were {0} {0,choice,0#objects|1#object|1<objects}";
MessageFormat fmt = new MessageFormat(formatString);
fmt.format(new Object[] { new Long(numberOfObjects) });

21
মেসেজফর্ম্যাটটি স্থানীয়করণের উদ্দেশ্যে, সুতরাং এটি ব্যবহার করার সময় যত্ন নিন। উদাহরণস্বরূপ, MessageFormat.format("Number {0}", 1234));ডিফল্ট লোকেলের উপর নির্ভর করে নিম্নলিখিত কোডটি এর Number 1,234পরিবর্তে উত্পাদন করতে পারে Number 1234
পাভেল_কাজলৌ

@ এ্যাটেলর: হ্যালো, দুঃখিত তবে আমি কিছুটা বিভ্রান্ত। আমি এমন কিছু করতে চাই যে আমি ক্লাস অবজেক্টটি পাস করব যাতে ডেটা রয়েছে এবং কখন {0} it ll take firstname, কখন {1} then lastname, এমন। এটা কি এরকম {0,choice,0.getFirstName()}বা এরকম কিছু সম্ভব ?
ব্যবহারকারী 3145373

@ user3145373 ツ আমার মনে হয় না।
ataylor

ঠিক আছে, আমি একটি রেফারেন্স করেছি। নেট প্রজেক্টটি আমি চাই, কোডেপ্রজেক্ট / আর্টিকেলস / ২৪৩০/১০ , এই প্রকল্পটি উল্লেখ করুন যা আমি দেখতে চাই। আপনি যদি এর মতো কোনও প্রকল্প বা প্যাকেজগুলি জানেন তবে দয়া করে আমাকে বলুন। আপনাকে ধন্যবাদ
ব্যবহারকারী 3145373 ツ

233

কটাক্ষপাত String.format । নোট, তবে, এটি ফাংশনগুলির সি এর প্রিন্টফ পরিবারের অনুরূপ ফর্ম্যাট স্পেসিফায়ারগুলি গ্রহণ করে - উদাহরণস্বরূপ:

String.format("Hello %s, %d", "world", 42);

"হ্যালো ওয়ার্ল্ড, 42" ফিরে আসবে। ফর্ম্যাট স্পেসিফায়ারগুলি সম্পর্কে শিখার সময় আপনি এই সহায়কটি পেতে পারেন । অ্যান্ডি টমাস-ক্র্যামার নীচের একটি মন্তব্যে এই লিঙ্কটি ছেড়ে দেওয়ার পক্ষে যথেষ্ট সদয় ছিলেন , যা সরকারী অনুমানের দিকে ইঙ্গিত করে বলে মনে হয়। সর্বাধিক ব্যবহৃত হয়:

  • % s - একটি স্ট্রিং .োকান
  • % d - একটি স্বাক্ষরিত পূর্ণসংখ্যা প্রবেশ করান (দশমিক)
  • % f - একটি আসল নম্বর standardোকান, মানক স্বরলিপি

এটি সি # থেকে মূলত পৃথক, যা anচ্ছিক বিন্যাস নির্দিষ্টকরণকারীর সাথে অবস্থানগত রেফারেন্স ব্যবহার করে। এর অর্থ হ'ল আপনি এই জাতীয় কাজগুলি করতে পারবেন না:

String.format("The {0} is repeated again: {0}", "word");

... প্রকৃতপক্ষে পরামিতিটি প্রিন্টএফ / ফর্ম্যাটে উত্তীর্ণ না করে। (নীচে স্ক্র্যাম মিস্টার এর মন্তব্য দেখুন)


আপনি যদি কেবল ফলাফলটি সরাসরি মুদ্রণ করতে চান তবে আপনি নিজের পছন্দ অনুযায়ী System.out.printf ( মুদ্রণপ্রবাহ.প্রিন্টফ ) খুঁজে পেতে পারেন ।


2
আর একটি বিকল্প java.text.Message Format, যা {1} শৈলীর বিন্যাসের প্রতীকগুলি গ্রহণ করে। স্ট্রিং.ফর্ম্যাট () এর ফর্ম্যাট চিহ্নগুলি সি এর প্রিন্টফ () ফর্ম্যাট প্রতীকগুলির মতো হতে পারে - তবে এটি পৃথকও হতে পারে। দেখুন download.oracle.com/javase/6/docs/api/java/util/... পূর্ণ বাক্য গঠন জন্য।
অ্যান্ডি টমাস

53
String.formatএছাড়াও সংখ্যাসূচক অবস্থান নিতে পারে: String.format("%2$s %1$s", "foo", "bar");আউটপুট হবেbar foo
21-18 'এ স্ক্রুম মিস্টার

7

আপনি যদি স্ট্রিং.ফর্ম্যাট ব্যবহার না করা বেছে নেন তবে অন্য বিকল্পটি হ'ল + বাইনারি অপারেটর

String str = "Step " + a + " of " + b;

এটি এর সমতুল্য

new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));

আপনি যেটি ব্যবহার করুন তা আপনার পছন্দ। স্ট্রিংবিল্ডার দ্রুত, তবে গতির পার্থক্য প্রান্তিক। আমি +অপারেটরটি ব্যবহার করতে পছন্দ করি (যা একটি করে StringBuilder.append(String.valueOf(X)))এবং এটি পড়া সহজ করে তোলে।


5
আপনি যদি আমাকে অস্বীকার করতে চলেছেন তবে দয়া করে কেন তা ব্যাখ্যা করুন।
রায়ান আমোস

11
1) স্ট্রিং ফর্ম্যাটিং সম্পর্কিত একটি প্রশ্নের জবাবে আপনি ব্যাখ্যা করেন যে +অপারেটর কীভাবে কাজ করে। 2) আপনার ব্যাখ্যা এমনকি সঠিক নয়। +ব্যবহার করার সমান StringBuilder, না String.concat(এটি সম্পর্কে খুব বেশি তথ্য।)
সেরেন ল্যাভবার্গ

6

আমি এটির জন্য আমার সহজ পদ্ধতিটি লিখেছি:

public class SomeCommons {
    /** Message Format like 'Some String {0} / {1}' with arguments */
    public static String msgFormat(String s, Object... args) {
        return new MessageFormat(s).format(args);
    }
}

যাতে আপনি এটি হিসাবে ব্যবহার করতে পারেন:

SomeCommons.msfgFormat("Step {1} of {2}", 1 , "two");

5
public class StringFormat {

    public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            System.out.println("================================");
            for(int i=0;i<3;i++){
                String s1=sc.next();
                int x=sc.nextInt();
                System.out.println(String.format("%-15s%03d",s1,x));
            }
            System.out.println("================================");

    }
}

আউটপট "==============================" "
ved15space123 ved15space123 ved15space123" =========== =====================

জাভা সমাধান

  • "-" বাম ইনডেন্ট ব্যবহার করা হয়

  • "15" স্ট্রিংয়ের ন্যূনতম দৈর্ঘ্য 15 হয় এটি করে

  • "স্ট" (যা% এর পরে কয়েকটি অক্ষর) আমাদের স্ট্রিং দ্বারা প্রতিস্থাপিত হবে
  • বাম দিকে 0 টি দিয়ে আমাদের পূর্ণসংখ্যা 0 প্যাডগুলি
  • 3টি আমাদের পূর্ণসংখ্যাকে সর্বনিম্ন 3 এর দৈর্ঘ্য করে


1

এই সমাধানটি আমার পক্ষে কাজ করেছিল। আমার একটি গতিশীলভাবে একটি রেস্ট ক্লায়েন্টের জন্য ইউআরএল তৈরি করা দরকার তাই আমি এই পদ্ধতিটি তৈরি করেছিলাম, সুতরাং আপনাকে কেবল এইরূপে রেস্টআরএল পাস করতে হবে

/customer/{0}/user/{1}/order

এবং আপনার প্রয়োজন হিসাবে অনেকগুলি প্যারাম যুক্ত করুন:

public String createURL (String restURL, Object ... params) {       
    return new MessageFormat(restURL).format(params);
}

আপনাকে কেবল এই পদ্ধতিটি কল করতে হবে:

createURL("/customer/{0}/user/{1}/order", 123, 321);

আউটপুট

"/ গ্রাহক / 123 / ব্যবহারকারী / 321 / অর্ডার"


0

আমি এই ফাংশনটি লিখেছি এটি ঠিক কাজ করে। $একই নামের ভেরিয়েবলের মান দিয়ে শুরু হওয়া কোনও শব্দকে বিভক্ত করুন ।

private static String interpol1(String x){
    Field[] ffield =  Main.class.getDeclaredFields();
    String[] test = x.split(" ") ;
    for (String v : test ) {
        for ( Field n: ffield ) {
            if(v.startsWith("$") && ( n.getName().equals(v.substring(1))  )){
                try {
                    x = x.replace("$" + v.substring(1), String.valueOf( n.get(null)));
                }catch (Exception e){
                    System.out.println("");
                }
            }
        }
    }
    return x;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.