আদিম প্রশ্ন, তবে আমি এর মতো স্ট্রিংগুলিকে কীভাবে বিন্যাস করব:
"{2} এর পদক্ষেপ {1}"
জাভা ব্যবহার করে ভেরিয়েবল প্রতিস্থাপন করে? সি # তে এটি সহজ।
আদিম প্রশ্ন, তবে আমি এর মতো স্ট্রিংগুলিকে কীভাবে বিন্যাস করব:
"{2} এর পদক্ষেপ {1}"
জাভা ব্যবহার করে ভেরিয়েবল প্রতিস্থাপন করে? সি # তে এটি সহজ।
উত্তর:
স্ট্রিং.ফর্ম্যাট ছাড়াও একবার দেখুন 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) });
MessageFormat.format("Number {0}", 1234));
ডিফল্ট লোকেলের উপর নির্ভর করে নিম্নলিখিত কোডটি এর Number 1,234
পরিবর্তে উত্পাদন করতে পারে Number 1234
।
{0} it ll take firstname
, কখন {1} then lastname
, এমন। এটা কি এরকম {0,choice,0.getFirstName()}
বা এরকম কিছু সম্ভব ?
কটাক্ষপাত String.format । নোট, তবে, এটি ফাংশনগুলির সি এর প্রিন্টফ পরিবারের অনুরূপ ফর্ম্যাট স্পেসিফায়ারগুলি গ্রহণ করে - উদাহরণস্বরূপ:
String.format("Hello %s, %d", "world", 42);
"হ্যালো ওয়ার্ল্ড, 42" ফিরে আসবে। ফর্ম্যাট স্পেসিফায়ারগুলি সম্পর্কে শিখার সময় আপনি এই সহায়কটি পেতে পারেন । অ্যান্ডি টমাস-ক্র্যামার নীচের একটি মন্তব্যে এই লিঙ্কটি ছেড়ে দেওয়ার পক্ষে যথেষ্ট সদয় ছিলেন , যা সরকারী অনুমানের দিকে ইঙ্গিত করে বলে মনে হয়। সর্বাধিক ব্যবহৃত হয়:
এটি সি # থেকে মূলত পৃথক, যা anচ্ছিক বিন্যাস নির্দিষ্টকরণকারীর সাথে অবস্থানগত রেফারেন্স ব্যবহার করে। এর অর্থ হ'ল আপনি এই জাতীয় কাজগুলি করতে পারবেন না:
String.format("The {0} is repeated again: {0}", "word");
... প্রকৃতপক্ষে পরামিতিটি প্রিন্টএফ / ফর্ম্যাটে উত্তীর্ণ না করে। (নীচে স্ক্র্যাম মিস্টার এর মন্তব্য দেখুন)
আপনি যদি কেবল ফলাফলটি সরাসরি মুদ্রণ করতে চান তবে আপনি নিজের পছন্দ অনুযায়ী System.out.printf ( মুদ্রণপ্রবাহ.প্রিন্টফ ) খুঁজে পেতে পারেন ।
String.format
এছাড়াও সংখ্যাসূচক অবস্থান নিতে পারে: String.format("%2$s %1$s", "foo", "bar");
আউটপুট হবেbar foo
আপনি যদি স্ট্রিং.ফর্ম্যাট ব্যবহার না করা বেছে নেন তবে অন্য বিকল্পটি হ'ল + বাইনারি অপারেটর
String str = "Step " + a + " of " + b;
এটি এর সমতুল্য
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
আপনি যেটি ব্যবহার করুন তা আপনার পছন্দ। স্ট্রিংবিল্ডার দ্রুত, তবে গতির পার্থক্য প্রান্তিক। আমি +
অপারেটরটি ব্যবহার করতে পছন্দ করি (যা একটি করে StringBuilder.append(String.valueOf(X)))
এবং এটি পড়া সহজ করে তোলে।
+
অপারেটর কীভাবে কাজ করে। 2) আপনার ব্যাখ্যা এমনকি সঠিক নয়। +
ব্যবহার করার সমান StringBuilder
, না String.concat
। (এটি সম্পর্কে খুব বেশি তথ্য।)
আমি এটির জন্য আমার সহজ পদ্ধতিটি লিখেছি:
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");
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 হয় এটি করে
এই সমাধানটি আমার পক্ষে কাজ করেছিল। আমার একটি গতিশীলভাবে একটি রেস্ট ক্লায়েন্টের জন্য ইউআরএল তৈরি করা দরকার তাই আমি এই পদ্ধতিটি তৈরি করেছিলাম, সুতরাং আপনাকে কেবল এইরূপে রেস্টআরএল পাস করতে হবে
/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 / অর্ডার"
আমি এই ফাংশনটি লিখেছি এটি ঠিক কাজ করে। $
একই নামের ভেরিয়েবলের মান দিয়ে শুরু হওয়া কোনও শব্দকে বিভক্ত করুন ।
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;
}