স্ট্রিংকে লং ইন কোটলিনে রূপান্তর করবেন কীভাবে?


157

সুতরাং, মত পদ্ধতির অভাবে Long.valueOf(String s)আমি আটকে আছি।

স্ট্রিংকে লং ইন কোটলিনে রূপান্তর করবেন কীভাবে?

উত্তর:


153

1। string.toLong()

স্ট্রিংটিকে [দীর্ঘ] সংখ্যা হিসাবে পার্স করে ফলাফল প্রদান করে।

স্ট্রিং যদি কোনও সংখ্যার বৈধ উপস্থাপনা না হয় তবে @ থ্রো নাম্বার ফর্ম্যাটএক্সসেপশন।

2। string.toLongOrNull()

স্ট্রিংটিকে [দীর্ঘ] সংখ্যা হিসাবে পার্স করে এবং ফলাফলটি প্রদান করে বা null স্ট্রিং যদি কোনও সংখ্যার বৈধ উপস্থাপনা না হয়।

3। str.toLong(10)

স্ট্রিংটিকে [দীর্ঘ] সংখ্যা হিসাবে পার্স করে ফলাফল প্রদান করে।

স্ট্রিং যদি কোনও সংখ্যার বৈধ উপস্থাপনা না হয় তবে @ থ্রো নাম্বার ফর্ম্যাটএক্সসেপশন।

@ থ্রিজ ইলিজালআরগমেন্ট এক্সেপশন যখন [রেডিক্স] স্ট্রিং-তে রূপান্তরকরণের জন্য কোনও বৈধ রেডিক্স নয়।

public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))

4। string.toLongOrNull(10)

স্ট্রিংটিকে [দীর্ঘ] সংখ্যা হিসাবে পার্স করে এবং ফলাফলটি প্রদান করে বা null স্ট্রিং যদি কোনও সংখ্যার বৈধ উপস্থাপনা না হয়।

@ থ্রিজ ইলিজালআরগমেন্ট এক্সেপশন যখন [রেডিক্স] স্ট্রিং-তে রূপান্তরকরণের জন্য কোনও বৈধ রেডিক্স নয়।

public fun String.toLongOrNull(radix: Int): Long? {...}

5। java.lang.Long.valueOf(string)

public static Long valueOf(String s) throws NumberFormatException

1
আইভাল, অ্যালি বড
ডলডর্মমা

94

String একটি সম্পর্কিত এক্সটেনশন পদ্ধতি রয়েছে:

"10".toLong()

1
নামগুলি কোটলিনে পরিবর্তিত হয়েছে, কোথায় বা কেন, আপনার কোথাও চিন্তিত হওয়ার দরকার নেই, কেবল কোটলিনে জেনে থাকুন যে সবার পাশাপাশি এবং অন্যদের Stringএক্সটেনশন ফাংশন রয়েছে। আপনি এই ব্যবহার করতে পারেন। সম্ভবত @ilya বর্তমান উত্তর কোটলিনের এই উত্তরটি আপডেট করতে পারে ( রেফারেন্স সরান ))toLong()toInt()jet.String
জেইসন মিনার্ড

একটি শীর্ষস্থানীয়, যদি আপনি অঙ্কের একটি স্ট্রিং পুনরাবৃত্তি করেন তবে সেগুলি অক্ষর এবং [চর] হবে to তবে () আপনাকে আসকি উপস্থাপনা দেবে।
পেহেজে

58

এক্সটেনশন পদ্ধতিগুলি Stringতাদের অন্যান্য আদিম ধরণের পার্স করার জন্য উপলব্ধ । নীচে উদাহরণ:


2
str.toLongOrNull()এবং অনুরূপভাবে নামযুক্ত অন্যান্য পদ্ধতিগুলিও দরকারী যদি আপনি গ্যারান্টি দিতে না পারেন যে ইনপুটটি সঠিকভাবে ফর্ম্যাট হবে। str.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
এটির সাহায্যে

9

দ্রষ্টব্য: উল্লেখ করা উত্তরগুলি jet.Stringপুরানো। এখানে বর্তমান কোটলিন (1.0):

কোন StringKotlin ইতিমধ্যে একটি এক্সটেনশন ফাংশন আপনি কল করতে পারেন হয়েছে toLong()। বিশেষ কিছু প্রয়োজন হয় না, কেবল এটি ব্যবহার করুন।

এর জন্য সমস্ত এক্সটেনশন ফাংশনString ডকুমেন্টেড। আপনি এপিআই রেফারেন্সে স্ট্যান্ডার্ড লিবের জন্য অন্যকে খুঁজে পেতে পারেন


7

এটা মজার. এর মতো কোড:

val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);

এই আউটপুট তোলে:

2
true

আমার ধারণা, এই ক্ষেত্রে কোটলিন স্বয়ংক্রিয়ভাবে রূপান্তর করে java.lang.Longদীর্ঘ আদিম করে তোলে kotlin.Long। সুতরাং, এটি সমাধান, তবে আমি java.lang প্যাকেজ ব্যবহার ছাড়াই সরঞ্জাম দেখতে পেরে খুশি হব।


6

প্রকৃতপক্ষে, আপনাকে 'দীর্ঘ' পরীক্ষা করতে হবে এমন 90% সময়ও বৈধ, সুতরাং আপনার প্রয়োজন:

"10".toLongOrNull()

বেসিক ধরণের প্রতিটি 'টু লং' এর জন্য একটি 'অরনুল' সমতুল্য রয়েছে এবং এগুলি কোটলিনের সাথে মিল রেখে অবৈধ কেসগুলি পরিচালনা করার অনুমতি দেয়? বাগ্ধারা।


একমত। বেশিরভাগ সময় .toLongOrNull () আপনার যা প্রয়োজন তা হ'ল।
আন্দ্রেজ


0

উত্তরগুলির মধ্যে যা উল্লেখ করা হয়নি তার মধ্যে একটি ভাল পুরানো জাভা সম্ভাবনা java.lang.Long.decode(String)


দশমিক স্ট্রিংস:

কোটলিন String.toLong()জাভা এর সমান Long.parseLong(String):

একটি স্বাক্ষরিত দশমিক দীর্ঘ হিসাবে স্ট্রিং আর্গুমেন্টটিকে পার্স করে । ... ফলস্বরূপ দীর্ঘ মানটি প্রত্যাবর্তন করা হয়, ঠিক যেমনটি যদি parseLong(java.lang.String, int)পদ্ধতিতে যুক্তি এবং 10 মুল্যকে দেওয়া হয়েছিল ।


অ-দশমিক স্ট্রিং:

কোটলিন String.toLong(radix: Int)জাভা Long.parseLong(String, int) এর সমতুল্য :

দ্বিতীয় আর্গুমেন্ট দ্বারা নির্দিষ্ট রেডিক্সে স্ট্রিং আর্গুমেন্টটিকে একটি স্বাক্ষরিত দীর্ঘ হিসাবে পার্স করে। স্ট্রিংয়ের অক্ষরগুলি অবশ্যই নির্দিষ্ট রেডিক্সের অঙ্কের হতে হবে ...

এবং এখানে java.lang.Long.decode(String)ছবিতে আসে :

একটি স্ট্রিংকে দীর্ঘায়িত করে Dec নিম্নলিখিত ব্যাকরণের দ্বারা প্রদত্ত দশমিক, হেক্সাডেসিমাল এবং অষ্টাল সংখ্যা গ্রহণ করে: ডিকোডেবল স্ট্রিং:

(স্বাক্ষর) দশমিক সংখ্যা | (সাইন) 0x হেক্সডিজিটস | (সাইন) 0 এক্স হেক্সডিজিটস | (সাইন) # হেক্সডিজিটস | (সাইন) 0 অক্টালডিজিটস

সাইন: - | + +

তার মানে এই যে decodeস্ট্রিংগুলিকে পার্স করতে পারে "0x412", যেখানে অন্যান্য পদ্ধতির ফলে একটি হয় NumberFormatException

val kotlin_toLong010 = "010".toLong() // 10 as parsed as decimal
val kotlin_toLong10 = "10".toLong() // 10 as parsed as decimal
val java_parseLong010 = java.lang.Long.parseLong("010") // 10 as parsed as decimal
val java_parseLong10 = java.lang.Long.parseLong("10") // 10 as parsed as decimal

val kotlin_toLong010Radix = "010".toLong(8) // 8 as "octal" parsing is forced
val kotlin_toLong10Radix = "10".toLong(8) // 8 as "octal" parsing is forced
val java_parseLong010Radix = java.lang.Long.parseLong("010", 8) // 8 as "octal" parsing is forced
val java_parseLong10Radix = java.lang.Long.parseLong("10", 8) // 8 as "octal" parsing is forced

val java_decode010 = java.lang.Long.decode("010") // 8 as 0 means "octal"
val java_decode10 = java.lang.Long.decode("10") // 10 as parsed as decimal

0

একটি রূপান্তর করতে Stringকরতে Long(যে 64-বিট পূর্ণসংখ্যা স্বাক্ষরিত প্রতিনিধিত্ব করে) Kotlin 1.3 বেশ সহজ

আপনি নিম্নলিখিত তিনটি পদ্ধতির যেকোনটি ব্যবহার করতে পারেন:

val number1: Long = "789".toLong()
println(number1)                                   // 789

val number2: Long? = "404".toLongOrNull()
println("number = $number2")                       // number = 404

val number3: Long? = "Error404".toLongOrNull()    
println("number = $number3")                       // number = null

val number4: Long? = "111".toLongOrNull(2)
println("numberWithRadix(2) = $number4")           // numberWithRadix(2) = 7

0

NumberFormatExceptionপার্স করার সময় আপনি যদি পরিচালনা করতে না চান

 var someLongValue=string.toLongOrNull() ?: 0

0

আসলে, বেশ কয়েকটি উপায় রয়েছে:

প্রদত্ত:

var numberString : String = "numberString" 
// number is the Long value of numberString (if any)
var defaultValue : Long    = defaultValue

তারপর আমাদের আছে:

+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ?            |  true    | false                 |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong()                       |  number  | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull()                 |  number  | null                  |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue |  number  | defaultValue          |
+—————————————————————————————————————————————+——————————+———————————————————————+

আপনার ডিফল্টভ্যালু = লম্বা: ডিফল্টভ্যালু কীভাবে থাকতে পারে আপনার উদাহরণে নম্বর স্ট্রিংটি কোথায় ব্যবহৃত হবে / আমি মনে করি এটি ডিফল্ট হওয়া উচিত? লম্বা: সংখ্যাস্ট্রিং?
জেমস স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.