গ্রোভিতে একটি স্ট্রিংকে ইনটে রূপান্তর করা


286

আমার কাছে একটি রয়েছে Stringযা একটি পূর্ণসংখ্যার মান উপস্থাপন করে এবং এটি একটিতে রূপান্তর করতে চাই int। জাভা এর সমান কি আছে Integer.parseInt(String)?


1
ডিএফ কীওয়ার্ডটি কেন ব্যবহার করবেন না?
সর্বব্যাপী

4
আমার একটি স্ট্রিং প্যারামিটার রয়েছে যাতে একটি পূর্ণসংখ্যা থাকে। ডিফ আই = স্ট্রিং_প্রেমিটার ব্যবহার করে ক্লাস কাস্ট ব্যতিক্রমের ফলাফল পরে যদি আমি আইটি হিসাবে ব্যবহার করি।
স্টিভ কুও

উত্তর:


492

ব্যবহার করুন toInteger()একটি রূপান্তর করতে পদ্ধতি Stringএকটি থেকে Integer, যেমন

int value = "99".toInteger()

একটি বিকল্প, যা একটি অবচয় পদ্ধতি ব্যবহার করা এড়ানো হয় (নীচে দেখুন) is

int value = "66" as Integer

আপনি কি না চেক করতে পারে এমন String করতে রূপান্তর, ব্যবহার করণ আগে রূপান্তরিত করা

String number = "66"

if (number.isInteger()) {
  int value = number as Integer
}

অবচয় আপডেট

গ্রোভির সাম্প্রতিক সংস্করণগুলিতে একটি toInteger()পদ্ধতি হ্রাস করা হয়েছে। নিম্নলিখিত org.codehaus.groovy.runtime.StringGroovyMethodsগ্রোভির ২.৪.৪ থেকে নেওয়া হয়েছে

/**
 * Parse a CharSequence into an Integer
 *
 * @param self a CharSequence
 * @return an Integer
 * @since 1.8.2
 */
public static Integer toInteger(CharSequence self) {
    return Integer.valueOf(self.toString().trim());
}

/**
 * @deprecated Use the CharSequence version
 * @see #toInteger(CharSequence)
 */
@Deprecated
public static Integer toInteger(String self) {
    return toInteger((CharSequence) self);
}

আপনি পদ্ধতির অ-অবজ্ঞাত সংস্করণকে জঘন্য কিছু ব্যবহার করে ডাকতে বাধ্য করতে পারেন:

int num = ((CharSequence) "66").toInteger()

ব্যক্তিগতভাবে, আমি অনেক পছন্দ করি:

int num = 66 as Integer

19
ক্যাভেট এমপোটার: আপনাকে isInteger()প্রথমে মানটি পরীক্ষা করতে toInteger()হবে কারণ স্ট্রিংয়ের সংখ্যাটি না হলে একটি ব্যতিক্রম ছুঁড়ে ফেলা হবে। toFloat()isFloat()
একইটি

8
ইন 2.1.6 API ডকুমেন্টেশন isInteger / toInteger অবচিত করছে। এটি করার এখনকার সর্বোত্তম উপায় কী?
পাকম্যান

1
ইন্টিজার প্যারামভ্যালু = প্যারামসিন্ট ('প্যারামনেম') ব্যবহার করা যদিও নিরাপদ নয়। যদি পরম মানচিত্রে "পরমনেম" নামের সাথে কোনও প্যারাম না থাকে তবে আপনি একটি ব্যতিক্রম পেয়েছেন যা সম্পর্কে শূন্য হয়ে যেতে পারে না।
মাইকেল

2
শুধু যোগ করতে চেয়েছিলেন, যেহেতু গ্রোভি 1.8 intপ্রকৃতপক্ষে int। খাঁজকাটা এখনও বক্সিং কারণে পূর্ণসংখ্যা বর্গ প্রদর্শন করা হবে, কিন্তু আপনি উদাহরণস্বরূপ দায়িত্ব অর্পণ করা সক্ষম হবে না nullএকটি থেকে int, যা 1.0 সম্ভব ছিল না। আমরা পরিবর্তনটিকে অ-সমালোচিত বলে বিবেচনা করেছি, যেহেতু আপনি ইতিমধ্যে কোনও পদ্ধতি কল প্যারামিটারের কোনও পদ্ধতি কল প্যারামিটারের জন্য আর্গুমেন্ট হিসাবে নাল ব্যবহার করতে পারেন নি int। এটি জাভা থেকে এখনও পৃথক, জাভা হিসাবে আপনি একটি সহজ কার্যক্রমে ইন্টিজার লংতে রূপান্তর করতে পারবেন না বা লং সহ কোনও অভ্যন্তরীণ পদ্ধতি গ্রহণের কল করতে পারবেন না।
ব্ল্যাকড্র্যাগ

1
@ পাকম্যান StringGroovyMethods.isInteger(String)এবং DefaultGroovyMethods.isInteger(CharSequence)তাদের পক্ষে অবমূল্যায়ন করা হয়েছে StringGroovyMethods.isInteger(CharSequence)। একই জন্য যায় toInteger()
bmaupin

67

এটি করার বিভিন্ন উপায়, এটি আমার প্রিয়:

def number = '123' as int

10
উপরের মতো একই সমস্যা, স্ট্রিং সংখ্যা না হলে এটি একটি ব্যতিক্রম ছুঁড়ে দেবে। isInteger()প্রথমে পরীক্ষা করে দেখুন ।
আন্দ্রেস কিয়েভস্কি

12
@ প্রশ্নটিতে একটি সমতুল্য জিজ্ঞাসা করা হয়েছে Integer.parseInt(String)যার একটি স্ট্রিং সংখ্যা না হলে একটি ব্যতিক্রম ছুঁড়েছে, সুতরাং প্রশ্নটি দেওয়া হয়েছে, আমি এটিকে একটি "সমস্যা" বিবেচনা করি না
ডোনাল

30

একটি সংযোজন হিসেবে ডন এর উত্তর না শুধুমাত্র খাঁজকাটা একটি জোড়ে .toInteger()করতে পদ্ধতি Stringগুলি, এটি যোগ করা toBigDecimal(), toBigInteger(), toBoolean(), toCharacter(), toDouble(), toFloat(), toList(), এবংtoLong()

একই শিরাতে, গ্রোভি is*যারা ফিরে আসে তাদের সকলের সাথে eivivalents যুক্ত trueকরেString যদি প্রশ্নটিতে প্রশ্নটির ফর্ম্যাটটিতে পার্স করা যায়।

সম্পর্কিত জিডিকে পৃষ্ঠাটি এখানে page


8
চেক প্রথম - এটা সঠিক উত্তর isInteger(), তারপর কি toInteger()হল যে ..., যদি না আপনি বরং একটি যোগ চাই try/ catchব্লক :) কিন্তু এই ব্যতিক্রম ব্যবহার করে একটি খারাপ ধারণা।
আন্দ্রেস কিয়েভস্কি

2
@ ক্যান্তাস্টিক আমি যুক্তি দিয়েছি যে আমার উত্তরটি আরও সঠিক কারণ প্রশ্নটি "জাভার ইন্টিজার.পার্সইন্ট (স্ট্রিং) এর একটি গ্রোভির সমতুল্য", অর্থাত একটি চেক না করা রূপান্তর
ডানাল

25

আমি নিশ্চিত নই যে এটি গ্রোভির সাম্প্রতিক সংস্করণগুলিতে প্রবর্তিত হয়েছিল কিনা (প্রাথমিক উত্তরটি বেশ পুরানো) তবে এখন আপনি ব্যবহার করতে পারেন:

def num = mystring?.isInteger() ? mystring.toInteger() : null

অথবা

def num = mystring?.isFloat() ? mystring.toFloat() : null

প্রস্তাবিত স্ট্রিংটি যদি অবিশ্বস্ত হয় তবে আমি ক্ষেত্রে পূর্ণসংখ্যার পরিবর্তে ফ্লোটস বা এমনকি দ্বিগুণ ব্যবহার করার পরামর্শ দিচ্ছি।


2
+1 সেরা সমাধান আইএমও হিসাবে এটি রূপান্তর করার আগে টাইপ চেক ছাড়াও নাল চেক অন্তর্ভুক্ত রয়েছে
ক্যাসক্লোটি

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

প্রথম নমুনা কোডের জন্য, আমার ধারণা আপনি mystring.toInteger()পরিবর্তে লিখতে চেয়েছিলেন mystring.toFloat()। তাই def num = mystring?.isInteger() ? mystring.toInteger() : nullসঠিক হবে।
Sk8erPeter

15

ঠিক আছে, গ্রোভি জাভা ফর্মটি ঠিকঠাক গ্রহণ করেছেন। আপনি যদি জিজ্ঞাসা করছেন যে কোনও গ্রোভিয়ার উপায় আছে কিনা, সেখানে যাওয়ার একটি উপায় আছে Integer

উভয় এখানে প্রদর্শিত হয়:

String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i

5
এই উত্তরটিও ছুঁড়ে ফেলা হয় যখন স্ট্রিংটি সংখ্যাসূচক নয় - নজর রাখুন!
আন্দ্রেস কিয়েভস্কি



2

এটি অর্জনের বিভিন্ন উপায়। উদাহরণগুলি নীচে রয়েছে

a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")

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


1
কীভাবে এটি ইতিমধ্যে 8 টি বিদ্যমান উত্তরে প্রশ্নটিতে কিছু যুক্ত করছে?
লুকজি

আমার খারাপ, কিছুটা লোভী হয়েছে এখানে
দার্থ শেখর

1

গ্রোভি স্টাইল রূপান্তর:

Integer num = '589' as Integer

আপনার কাছে যদি অনুরোধের প্যারামিটার থাকে:

Integer age = params.int('age')



0

ব্যবহারের উপায়টি এখনও toInteger () হওয়া উচিত, কারণ এটি সত্যই হ্রাস করা হয়নি।

int value = '99'.toInteger()

স্ট্রিং সংস্করণটি হ্রাস করা হয়েছে, তবে চারসেকেন্স একটি ইন্টারফেস যা একটি স্ট্রিং প্রয়োগ করে। সুতরাং, একটি স্ট্রিং ব্যবহার করা ঠিক আছে, কারণ আপনার কোডটি এখনও কাজ করবে এমনকি যখন পদ্ধতিটি কেবল চারসেকেন্সের সাথে কাজ করবে। একই আইটেমিটারের জন্য যায় ()

রেফারেন্সের জন্য এই প্রশ্নটি দেখুন: একটি স্ট্রিংকে চারসেকেন্সে কীভাবে রূপান্তর করবেন?

আমি মন্তব্য করেছিলাম, কারণ এই পদ্ধতিতে অবমূল্যায়নের ধারণাটি আমাকে বিভ্রান্ত করেছে এবং আমি অন্য লোকদের কাছে এড়াতে চাই।


-1

গ্রোভিতে পূর্ণসংখ্যার সাথে একটি স্ট্রিং রূপান্তরিত করার সহজ উপায় অনুসরণীয় ...

String aa="25"
int i= aa.toInteger()

এখন "আমি" পূর্ণসংখ্যা মানটি ধরে রাখে।


4
এটি বিদ্যমান উত্তরের সাথে কী যুক্ত করে? 9 বছর আগে পোস্ট করা স্বীকৃত উত্তরটি দিয়ে শুরু হয়: " toInteger()রূপান্তর করার জন্য পদ্ধতিটি ব্যবহার করুন ...
ডিফল্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.