আমি কিভাবে রূপান্তর করতে পারেন String
একটি থেকে int
জাভা?
আমার স্ট্রিংয়ে কেবল সংখ্যা রয়েছে এবং আমি এটি প্রতিনিধিত্ব করে এমন নম্বরটি ফিরিয়ে দিতে চাই।
উদাহরণস্বরূপ, স্ট্রিং দেওয়া "1234"
ফলাফলের সংখ্যা হওয়া উচিত 1234
।
আমি কিভাবে রূপান্তর করতে পারেন String
একটি থেকে int
জাভা?
আমার স্ট্রিংয়ে কেবল সংখ্যা রয়েছে এবং আমি এটি প্রতিনিধিত্ব করে এমন নম্বরটি ফিরিয়ে দিতে চাই।
উদাহরণস্বরূপ, স্ট্রিং দেওয়া "1234"
ফলাফলের সংখ্যা হওয়া উচিত 1234
।
উত্তর:
String myString = "1234";
int foo = Integer.parseInt(myString);
আপনি যদি জাভা ডকুমেন্টেশনের দিকে লক্ষ্য করেন তবে আপনি "ধরা" লক্ষ্য করবেন যে এই ফাংশনটি একটি নিক্ষেপ NumberFormatException
করতে পারে, অবশ্যই আপনাকে কোনটি পরিচালনা করতে হবে:
int foo;
try {
foo = Integer.parseInt(myString);
}
catch (NumberFormatException e)
{
foo = 0;
}
(এই চিকিত্সাটি একটি ত্রুটিযুক্ত সংখ্যাকে ডিফল্ট করে 0
তবে আপনি যদি চান তবে আপনি অন্য কিছু করতে পারেন))
বিকল্পভাবে, আপনি Ints
পেয়ারা গ্রন্থাগার থেকে একটি পদ্ধতি ব্যবহার করতে পারেন , যা জাভা 8 এর সাথে সম্মিলিতভাবে Optional
একটি স্ট্রিংকে একটি ইনটে রূপান্তর করার জন্য একটি শক্তিশালী এবং সংক্ষিপ্ত পথ তৈরি করে:
import com.google.common.primitives.Ints;
int foo = Optional.ofNullable(myString)
.map(Ints::tryParse)
.orElse(0)
int foo = NumberUtils.toInt(myString, 0);
উদাহরণস্বরূপ, এখানে দুটি উপায়:
Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);
এই পদ্ধতির মধ্যে সামান্য পার্থক্য রয়েছে:
valueOf
এর নতুন বা ক্যাশেড উদাহরণ প্রদান করে java.lang.Integer
parseInt
আদিম ফেরত int
।সমস্ত ক্ষেত্রে একই: Short.valueOf
/ parseShort
, Long.valueOf
/ parseLong
, ইত্যাদি for
valueOf
পদ্ধতিটি কেবলreturn valueOf(parseInt(string));
valueOf
নিজেকে পুনরাবৃত্তি বলে?
valueOf(String)
প্রথমে একটি int- এ ব্যবহার করার স্ট্রিং পার্স দ্বারা বাস্তবায়িত হয় parseInt(String)
এবং তারপর ব্যবহার করে একটি পূর্ণসংখ্যা যে int- এ মোড়কে valueOf(int)
। এখানে কোনও পুনরাবৃত্তি নেই কারণ valueOf(String)
এবং valueOf(int)
তাদের দুটি একই নাম থাকা সত্ত্বেও দুটি সম্পূর্ণ ভিন্ন ফাংশন।
ওয়েল, একটি খুব গুরুত্বপূর্ণ পয়েন্ট বিবেচনা করা যে পূর্ণসংখ্যা পার্সার NumberFormatException ছোঁড়ার যেমন বিবৃত করা হয় Javadoc ।
int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
//Will Throw exception!
//do something! anything to handle the exception.
}
try {
foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
//No problem this time, but still it is good practice to care about exceptions.
//Never trust user input :)
//Do something! Anything to handle the exception.
}
বিভক্ত আর্গুমেন্টগুলি থেকে পূর্ণসংখ্যার মানগুলি অর্জন করার সময় বা কিছুকে গতিশীলভাবে পার্স করার সময় এই ব্যতিক্রমটি পরিচালনা করা গুরুত্বপূর্ণ important
"([0-9]+)"
ইচ্ছা "ক্যাপচার" নয়টি মাধ্যমে এক অথবা তার বেশি সংখ্যার এক প্রথম অনুক্রম। Matcher
সেই প্যাকেজের ক্লাসটি দেখুন ।
এটি ম্যানুয়ালি করুন:
public static int strToInt( String str ){
int i = 0;
int num = 0;
boolean isNeg = false;
//Check for negative sign; if it's there, set the isNeg flag
if (str.charAt(0) == '-') {
isNeg = true;
i = 1;
}
//Process each character of the string;
while( i < str.length()) {
num *= 10;
num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
}
if (isNeg)
num = -num;
return num;
}
Integer.parseInt(s)
? - আমি এটি একটি সাক্ষাত্কারের প্রশ্ন হওয়ার বিষয়টি দেখছি, তবে ক) যা বোঝায় না যে আপনি এটি এভাবেই করতেন (যা প্রশ্নকারী জিজ্ঞাসা করেছিলেন), এবং খ) যাইহোক, এই উত্তরটি একটি খুব খারাপ উদাহরণ।
Integer.parseInt
কারণ এটির কোনও বৈধতা নেই।
বিকল্প সমাধান হ'ল অ্যাপাচি কমন্সের নম্বর ইউটিগুলি ব্যবহার করা :
int num = NumberUtils.toInt("1234");
অ্যাপাচি ইউটিলিটিটি দুর্দান্ত কারণ স্ট্রিংটি যদি একটি অবৈধ সংখ্যা বিন্যাস হয় তবে 0 সর্বদা ফিরে আসে। অতএব আপনি চেষ্টা ব্লক সংরক্ষণ।
বর্তমানে আমি কলেজের জন্য একটি অ্যাসাইনমেন্ট করছি, যেখানে আমি উপরের মত কিছু নির্দিষ্ট এক্সপ্রেশন ব্যবহার করতে পারি না এবং এএসসিআইআই টেবিলটি দেখে আমি এটি করতে সক্ষম হয়েছি। এটি একটি আরও জটিল কোড, তবে এটি আমার মতো সীমাবদ্ধ অন্যকে সহায়তা করতে পারে।
প্রথম কাজটি হ'ল ইনপুট গ্রহণ করা, এই ক্ষেত্রে, অঙ্কগুলির একটি স্ট্রিং; আমি এটি কল করব String number
এবং এই ক্ষেত্রে আমি 12 নম্বর ব্যবহার করে এটি উদাহরণ দিয়ে দেবString number = "12";
আর একটি সীমাবদ্ধতা হ'ল আমি পুনরাবৃত্ত চক্র ব্যবহার করতে পারি না, অতএব, একটি for
চক্র (যা নিখুঁত হতে পারে) হয় না ব্যবহার করা যায় না। এটি আমাদের কিছুটা সীমাবদ্ধ করে, তবে তারপরে আবার লক্ষ্য। যেহেতু আমার কেবল দুটি অঙ্কের প্রয়োজন (শেষ দুটি অঙ্ক নেওয়া), একটি সহজ charAt
সমাধান করেছে:
// Obtaining the integer values of the char 1 and 2 in ASCII
int semilastdigitASCII = number.charAt(number.length()-2);
int lastdigitASCII = number.charAt(number.length()-1);
কোডগুলি থাকা, আমাদের কেবল টেবিলটি সন্ধান করা এবং প্রয়োজনীয় সমন্বয় করা দরকার:
double semilastdigit = semilastdigitASCII - 48; //A quick look, and -48 is the key
double lastdigit = lastdigitASCII - 48;
এখন, কেন দ্বিগুণ? ঠিক আছে, কারণ সত্যই একটি "অদ্ভুত" পদক্ষেপ। বর্তমানে আমাদের দুটি ডাবল রয়েছে, 1 এবং 2, তবে আমাদের এটিকে 12 এ পরিণত করা দরকার, এমন কোনও গাণিতিক ক্রিয়াকলাপ নেই যা আমরা করতে পারি।
আমরা পরেরটি (লাস্ট ডিজিট) 10 কে 2/10 = 0.2
এভাবে ফ্যাশনে ভাগ করছি (সুতরাং কেন দ্বিগুণ):
lastdigit = lastdigit/10;
এটি নিছক সংখ্যা নিয়ে খেলছে। আমরা শেষ অঙ্কটিকে দশমিক দশকে পরিণত করছিলাম। তবে এখন দেখুন কী ঘটে:
double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2
অঙ্কে খুব বেশি না গিয়ে, আমরা কেবলমাত্র সংখ্যার অঙ্কগুলি ইউনিটকে পৃথক করে দিই। আপনি দেখুন, যেহেতু আমরা কেবল 0-9 বিবেচনা করি, 10 এর একাধিক দ্বারা ভাগ করা "বাক্স" তৈরি করার মতো যেখানে আপনি এটি সংরক্ষণ করেন (যখন আপনার প্রথম গ্রেডের শিক্ষক আপনাকে ইউনিট এবং একশত কী ছিল তখন ব্যাখ্যা করেছিলেন)। তাই:
int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"
এবং আপনি সেখানে যান। আপনি নিম্নলিখিত সীমাবদ্ধতা বিবেচনা করে, এই দুটি অঙ্কের সমন্বিত সংখ্যায় (এই ক্ষেত্রে, দুটি অঙ্ক) একটি স্ট্রিং পরিণত করেছেন:
'0'
চরিত্রটির পরিবর্তে ব্যবহার করতে পারেন 48
এবং কখনই করতে হবে না এর আসল সংখ্যাসূচক মান নিয়ে বিরক্ত করুন। তৃতীয়ত, double
দশটি দিয়ে দশকের সাথে ভাগ করে, দশটি দিয়ে ভাগ করে নেওয়ার সাথে মানগুলির সাথে পুরো পথটি মোটেই বোঝা যায় না। semilastdigit * 10 + lastdigit
দশমিক ব্যবস্থা চালু হওয়ার পরে ফলাফলটি প্রাথমিক বিদ্যালয়ে যেমন শিখেছিল ...
Integer.decode
আপনি ব্যবহার করতে পারেন public static Integer decode(String nm) throws NumberFormatException
।
এটি 8 এবং 16 বেসের জন্যও কাজ করে:
// base 10
Integer.parseInt("12"); // 12 - int
Integer.valueOf("12"); // 12 - Integer
Integer.decode("12"); // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8); // 10 - int
Integer.valueOf("12", 8); // 10 - Integer
Integer.decode("012"); // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16); // 18 - int
Integer.valueOf("12",16); // 18 - Integer
Integer.decode("#12"); // 18 - Integer
Integer.decode("0x12"); // 18 - Integer
Integer.decode("0X12"); // 18 - Integer
// base 2
Integer.parseInt("11",2); // 3 - int
Integer.valueOf("11",2); // 3 - Integer
int
পরিবর্তে পেতে চাইলে আপনি Integer
ব্যবহার করতে পারেন:
আনবক্সিং:
int val = Integer.decode("12");
intValue()
:
Integer.decode("12").intValue();
যখনই এই সামান্যতম সম্ভাবনা থাকে যে প্রদত্ত স্ট্রিংটিতে কোনও পূর্ণসংখ্যা থাকে না, আপনাকে এই বিশেষ কেসটি পরিচালনা করতে হবে। দুঃখের বিষয়, আদর্শ জাভা পদ্ধতি Integer::parseInt
এবং এই বিশেষ ক্ষেত্রে সংকেত দিতে Integer::valueOf
একটি নিক্ষেপ করুন NumberFormatException
। সুতরাং, আপনাকে প্রবাহ নিয়ন্ত্রণের জন্য ব্যতিক্রম ব্যবহার করতে হবে, যা সাধারণত খারাপ কোডিং শৈলী হিসাবে বিবেচিত হয়।
আমার মতে, এই বিশেষ কেসটি খালি ফিরে দিয়ে পরিচালনা করা উচিত Optional<Integer>
। যেহেতু জাভা এই জাতীয় পদ্ধতি প্রস্তাব করে না, আমি নিম্নলিখিত র্যাপারটি ব্যবহার করি:
private Optional<Integer> tryParseInteger(String string) {
try {
return Optional.of(Integer.valueOf(string));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
ব্যবহারের উদাহরণ:
// prints "12"
System.out.println(tryParseInteger("12").map(i -> i.toString()).orElse("invalid"));
// prints "-1"
System.out.println(tryParseInteger("-1").map(i -> i.toString()).orElse("invalid"));
// prints "invalid"
System.out.println(tryParseInteger("ab").map(i -> i.toString()).orElse("invalid"));
এটি অভ্যন্তরীণভাবে প্রবাহ নিয়ন্ত্রণের জন্য ব্যতিক্রমগুলি ব্যবহার করার সময়, ব্যবহারের কোডটি খুব পরিষ্কার হয়ে যায়। এছাড়াও, আপনি যে মামলাটি -1
বৈধ মান হিসাবে পার্স করা হয়েছে এবং যে ক্ষেত্রে কোনও অবৈধ স্ট্রিংকে বিশ্লেষণ করা যায়নি তা আপনি পরিষ্কারভাবে আলাদা করতে পারেন ।
একটি স্ট্রিংকে একটি ইনটে রূপান্তর করা কেবল একটি সংখ্যার রূপান্তর চেয়ে জটিল। আপনি নিম্নলিখিত বিষয়গুলি সম্পর্কে চিন্তাভাবনা করেছেন:
এটি করার পদ্ধতিগুলি:
1. Integer.parseInt(s)
2. Integer.parseInt(s, radix)
3. Integer.parseInt(s, beginIndex, endIndex, radix)
4. Integer.parseUnsignedInt(s)
5. Integer.parseUnsignedInt(s, radix)
6. Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
7. Integer.valueOf(s)
8. Integer.valueOf(s, radix)
9. Integer.decode(s)
10. NumberUtils.toInt(s)
11. NumberUtils.toInt(s, defaultValue)
Integer.valueOf পূর্ণসংখ্যার অবজেক্ট তৈরি করে, অন্যান্য সমস্ত পদ্ধতি - আদিম ইনট।
Commons-lang3 এবং এখানে রূপান্তর সম্পর্কে বড় নিবন্ধ থেকে শেষ 2 টি পদ্ধতি ।
স্ট্রিংয়ের মানটিকে পূর্ণসংখ্যার মান রূপান্তর parseInt(String str)
করার জন্য আমরা Integer
মোড়ক ক্লাসের পদ্ধতিটি ব্যবহার করতে পারি ।
উদাহরণ স্বরূপ:
String strValue = "12345";
Integer intValue = Integer.parseInt(strVal);
Integer
বর্গ এছাড়াও উপলব্ধ valueOf(String str)
পদ্ধতি:
String strValue = "12345";
Integer intValue = Integer.valueOf(strValue);
আমরা ব্যবহার করতে পারেন toInt(String strValue)
এর NumberUtils ইউটিলিটি ক্লাস রূপান্তর জন্য:
String strValue = "12345";
Integer intValue = NumberUtils.toInt(strValue);
ব্যবহার Integer.parseInt(yourString)
।
নিম্নলিখিত জিনিসগুলি মনে রাখবেন:
Integer.parseInt("1");
// ঠিক আছে
Integer.parseInt("-1");
// ঠিক আছে
Integer.parseInt("+1");
// ঠিক আছে
Integer.parseInt(" 1");
// ব্যতিক্রম (ফাঁকা জায়গা)
Integer.parseInt("2147483648");
// ব্যতিক্রম (পূর্ণসংখ্যার সর্বাধিক মূল্য 2,147,483,647 সীমাবদ্ধ )
Integer.parseInt("1.1");
// ব্যতিক্রম ( । বা , বা যা অনুমোদিত নয়)
Integer.parseInt("");
// ব্যতিক্রম (0 বা কিছু নয়)
ব্যতিক্রম শুধুমাত্র এক প্রকার: NumberFormatException
আমার একটি সমাধান আছে, তবে আমি জানি না এটি কতটা কার্যকর। তবে এটি কার্যকরভাবে কাজ করে এবং আমি মনে করি আপনি এটি উন্নতি করতে পারেন। অন্যদিকে, আমি JUnit এর সাথে বেশ কয়েকটি পরীক্ষা করেছি যা সঠিকভাবে ধাপে। আমি ফাংশন এবং পরীক্ষা সংযুক্ত করেছি:
static public Integer str2Int(String str) {
Integer result = null;
if (null == str || 0 == str.length()) {
return null;
}
try {
result = Integer.parseInt(str);
}
catch (NumberFormatException e) {
String negativeMode = "";
if(str.indexOf('-') != -1)
negativeMode = "-";
str = str.replaceAll("-", "" );
if (str.indexOf('.') != -1) {
str = str.substring(0, str.indexOf('.'));
if (str.length() == 0) {
return (Integer)0;
}
}
String strNum = str.replaceAll("[^\\d]", "" );
if (0 == strNum.length()) {
return null;
}
result = Integer.parseInt(negativeMode + strNum);
}
return result;
}
জুনিতের সাথে পরীক্ষা করা:
@Test
public void testStr2Int() {
assertEquals("is numeric", (Integer)(-5), Helper.str2Int("-5"));
assertEquals("is numeric", (Integer)50, Helper.str2Int("50.00"));
assertEquals("is numeric", (Integer)20, Helper.str2Int("$ 20.90"));
assertEquals("is numeric", (Integer)5, Helper.str2Int(" 5.321"));
assertEquals("is numeric", (Integer)1000, Helper.str2Int("1,000.50"));
assertEquals("is numeric", (Integer)0, Helper.str2Int("0.50"));
assertEquals("is numeric", (Integer)0, Helper.str2Int(".50"));
assertEquals("is numeric", (Integer)0, Helper.str2Int("-.10"));
assertEquals("is numeric", (Integer)Integer.MAX_VALUE, Helper.str2Int(""+Integer.MAX_VALUE));
assertEquals("is numeric", (Integer)Integer.MIN_VALUE, Helper.str2Int(""+Integer.MIN_VALUE));
assertEquals("Not
is numeric", null, Helper.str2Int("czv.,xcvsa"));
/**
* Dynamic test
*/
for(Integer num = 0; num < 1000; num++) {
for(int spaces = 1; spaces < 6; spaces++) {
String numStr = String.format("%0"+spaces+"d", num);
Integer numNeg = num * -1;
assertEquals(numStr + ": is numeric", num, Helper.str2Int(numStr));
assertEquals(numNeg + ": is numeric", numNeg, Helper.str2Int("- " + numStr));
}
}
}
(int) Double.parseDouble(input.replaceAll("[^0-9\\.\\-]", ""));
গুগল পেয়ারা হয়েছে tryParse (STRING) , যা আয় null
যদি স্ট্রিং, অংশ পার্স করা যায়নি উদাহরণস্বরূপ:
Integer fooInt = Ints.tryParse(fooString);
if (fooInt != null) {
...
}
আপনি সমস্ত অ সংখ্যাগত অক্ষর মুছে ফেলা এবং তারপরে পূর্ণসংখ্যাকে পার্স করে শুরু করতে পারেন:
String mystr = mystr.replaceAll("[^\\d]", "");
int number = Integer.parseInt(mystr);
তবে সতর্ক হতে হবে যে এটি কেবল অ-নেতিবাচক সংখ্যার জন্যই কাজ করে।
"4+2"
পাব 42
। ব্যবহারকারীর ধারণাটি পাওয়া যাবে যে প্রাথমিক মত প্রকাশ করা যেমন 4+2
একটি বৈধ ইনপুট ছিল তবে অ্যাপ্লিকেশনটি একটি ভুল মান দিয়ে চালিয়ে যাচ্ছে। তদ্ব্যতীত, প্রকারটি String
, নয় string
...
পূর্ববর্তী উত্তরগুলি বাদে আমি বেশ কয়েকটি ফাংশন যুক্ত করতে চাই। আপনি এগুলি ব্যবহার করার সময় এগুলি ফলাফল:
public static void main(String[] args) {
System.out.println(parseIntOrDefault("123", 0)); // 123
System.out.println(parseIntOrDefault("aaa", 0)); // 0
System.out.println(parseIntOrDefault("aaa456", 3, 0)); // 456
System.out.println(parseIntOrDefault("aaa789bbb", 3, 6, 0)); // 789
}
বাস্তবায়ন:
public static int parseIntOrDefault(String value, int defaultValue) {
int result = defaultValue;
try {
result = Integer.parseInt(value);
}
catch (Exception e) {
}
return result;
}
public static int parseIntOrDefault(String value, int beginIndex, int defaultValue) {
int result = defaultValue;
try {
String stringValue = value.substring(beginIndex);
result = Integer.parseInt(stringValue);
}
catch (Exception e) {
}
return result;
}
public static int parseIntOrDefault(String value, int beginIndex, int endIndex, int defaultValue) {
int result = defaultValue;
try {
String stringValue = value.substring(beginIndex, endIndex);
result = Integer.parseInt(stringValue);
}
catch (Exception e) {
}
return result;
}
উল্লিখিত হিসাবে, অ্যাপাচি কমন্স ' NumberUtils
এটি করতে পারে। এটি 0
যদি স্ট্রিংকে কোন ইনটে রূপান্তর করতে না পারে তবে তা ফিরে আসে ।
আপনি নিজের ডিফল্ট মানটিও সংজ্ঞায়িত করতে পারেন:
NumberUtils.toInt(String str, int defaultValue)
উদাহরণ:
NumberUtils.toInt("3244", 1) = 3244
NumberUtils.toInt("", 1) = 1
NumberUtils.toInt(null, 5) = 5
NumberUtils.toInt("Hi", 6) = 6
NumberUtils.toInt(" 32 ", 1) = 1 // Space in numbers are not allowed
NumberUtils.toInt(StringUtils.trimToEmpty(" 32 ", 1)) = 32;
আপনি কিছু সতর্কতা সহ এই কোডটিও ব্যবহার করতে পারেন।
বিকল্প # 1: ব্যতিক্রমটি স্পষ্টভাবে পরিচালনা করুন, উদাহরণস্বরূপ, একটি বার্তা ডায়ালগ দেখানো এবং তারপরে বর্তমান ওয়ার্কফ্লোটি কার্যকর করা বন্ধ করুন। উদাহরণ স্বরূপ:
try
{
String stringValue = "1234";
// From String to Integer
int integerValue = Integer.valueOf(stringValue);
// Or
int integerValue = Integer.ParseInt(stringValue);
// Now from integer to back into string
stringValue = String.valueOf(integerValue);
}
catch (NumberFormatException ex) {
//JOptionPane.showMessageDialog(frame, "Invalid input string!");
System.out.println("Invalid input string!");
return;
}
বিকল্প # 2: যদি ব্যতিক্রমের ক্ষেত্রে কার্যকর করা প্রবাহ অব্যাহত রাখতে পারে তবে প্রভাবিত পরিবর্তনশীলটিকে পুনরায় সেট করুন। উদাহরণস্বরূপ, ক্যাচ ব্লকে কিছু পরিবর্তন সহ
catch (NumberFormatException ex) {
integerValue = 0;
}
তুলনা বা যেকোন ধরণের কম্পিউটিংয়ের জন্য স্ট্রিং ধ্রুবক ব্যবহার করা সর্বদা একটি ভাল ধারণা, কারণ একটি ধ্রুবক কখনই নাল মান দেয় না।
JOptionPane.showMessageDialog()
ভ্যানিলা জাভা প্রশ্নের উত্তরে কোন মানে নেই।
Integer.valueOf(String);
প্রকার ফিরে আসে না int
।
আপনি ব্যবহার করতে পারেন new Scanner("1244").nextInt()
। অথবা জিজ্ঞাসা করুন এমনকি কোন int উপস্থিত রয়েছে:new Scanner("1244").hasNextInt()
প্রোগ্রামিং প্রতিযোগিতায়, যেখানে আপনি নিশ্চিত হয়ে থাকেন যে নম্বরটি সর্বদা বৈধ পূর্ণসংখ্যার হয়ে থাকে, তারপরে আপনি ইনপুট পার্স করার জন্য নিজের পদ্ধতি লিখতে পারেন। এটি সমস্ত বৈধতা সম্পর্কিত কোডটি এড়িয়ে যাবে (যেহেতু আপনার কোনওটির প্রয়োজন নেই) এবং এটি আরও কার্যকর হবে be
বৈধ ধনাত্মক পূর্ণসংখ্যার জন্য:
private static int parseInt(String str) {
int i, n = 0;
for (i = 0; i < str.length(); i++) {
n *= 10;
n += str.charAt(i) - 48;
}
return n;
}
ধনাত্মক এবং নেতিবাচক উভয় পূর্ণসংখ্যার জন্য:
private static int parseInt(String str) {
int i=0, n=0, sign=1;
if (str.charAt(0) == '-') {
i = 1;
sign = -1;
}
for(; i<str.length(); i++) {
n* = 10;
n += str.charAt(i) - 48;
}
return sign*n;
}
যদি আপনি এই সংখ্যাগুলির আগে বা পরে কোনও শ্বেত স্পেসের প্রত্যাশা করে থাকেন, তবে str = str.trim()
আরও প্রক্রিয়া করার আগে অবশ্যই কিছু নিশ্চিত করুন ।
কেবল আপনি এটি চেষ্টা করতে পারেন:
Integer.parseInt(your_string);
একটি রূপান্তর করতে String
করতেint
Double.parseDouble(your_string);
একটি রূপান্তর করতে String
করতেdouble
String str = "8955";
int q = Integer.parseInt(str);
System.out.println("Output>>> " + q); // Output: 8955
String str = "89.55";
double q = Double.parseDouble(str);
System.out.println("Output>>> " + q); // Output: 89.55
int foo=Integer.parseInt("1234");
নিশ্চিত হয়ে নিন যে স্ট্রিংটিতে কোনও অ-সংখ্যাযুক্ত ডেটা নেই।
আমি খানিকটা অবাক হয়েছি যে কেউ স্ট্রিংকে প্যারামিটার হিসাবে গ্রহণ করে এমন পূর্ণসংখ্যা কন্সট্রাক্টরের কথা উল্লেখ করেনি।
সুতরাং, এটি এখানে:
String myString = "1234";
int i1 = new Integer(myString);
জাভা 8 - পূর্ণসংখ্যা (স্ট্রিং) ।
অবশ্যই, কনস্ট্রাক্টর টাইপ ফিরে আসবে Integer
এবং একটি আনবক্সিং অপারেশন মানটিকে রূপান্তর করে int
।
এটি উল্লেখ করা গুরুত্বপূর্ণ : এই নির্মাণকারী parseInt
পদ্ধতিটি কল করে the
public Integer(String var1) throws NumberFormatException {
this.value = parseInt(var1, 10);
}
Integer.parseInt () ব্যবহার করুন এবং try...catch
কোনও সংখ্যাসূচক অক্ষর প্রবেশ করানোর ক্ষেত্রে কোনও ত্রুটি হ্যান্ডেল করতে এটি একটি ব্লকের ভিতরে রাখুন , উদাহরণস্বরূপ,
private void ConvertToInt(){
String string = txtString.getText();
try{
int integerValue=Integer.parseInt(string);
System.out.println(integerValue);
}
catch(Exception e){
JOptionPane.showMessageDialog(
"Error converting string to integer\n" + e.toString,
"Error",
JOptionPane.ERROR_MESSAGE);
}
}
এখানে আমরা যাই
String str="1234";
int number = Integer.parseInt(str);
print number;//1234
এটি সাতটি উপায়ে করা যেতে পারে:
import com.google.common.primitives.Ints;
import org.apache.commons.lang.math.NumberUtils;
String number = "999";
1) ব্যবহার Ints.tryParse
:
int result = Ints.tryParse(number);
2) ব্যবহার NumberUtils.createInteger
:
Integer result = NumberUtils.createInteger(number);
3) ব্যবহার NumberUtils.toInt
:
int result = NumberUtils.toInt(number);
4) ব্যবহার Integer.valueOf
:
Integer result = Integer.valueOf(number);
5) ব্যবহার Integer.parseInt
:
int result = Integer.parseInt(number);
6) ব্যবহার Integer.decode
:
int result = Integer.decode(number);
7) ব্যবহার Integer.parseUnsignedInt
:
int result = Integer.parseUnsignedInt(number);
একটি পদ্ধতি পার্সিয়ান্ট (স্ট্রিং)। এটি একটি আদিম অন্তর্গঠন ফিরিয়ে দেয়:
String number = "10";
int result = Integer.parseInt(number);
System.out.println(result);
দ্বিতীয় পদ্ধতিটি মানফল (স্ট্রিং), এবং এটি একটি নতুন পূর্ণসংখ্যা () অবজেক্টটি প্রদান করে:
String number = "10";
Integer result = Integer.valueOf(number);
System.out.println(result);
আপনি নিম্নলিখিত যে কোনও ব্যবহার করতে পারেন:
Integer.parseInt(s)
Integer.parseInt(s, radix)
Integer.parseInt(s, beginIndex, endIndex, radix)
Integer.parseUnsignedInt(s)
Integer.parseUnsignedInt(s, radix)
Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
Integer.valueOf(s)
Integer.valueOf(s, radix)
Integer.decode(s)
NumberUtils.toInt(s)
NumberUtils.toInt(s, defaultValue)
এটি একটি লাইব্রেরি ব্যবহার না করে সমস্ত অবস্থার ইতিবাচক এবং নেতিবাচক সমেত একটি সম্পূর্ণ প্রোগ্রাম
import java.util.Scanner;
public class StringToInt {
public static void main(String args[]) {
String inputString;
Scanner s = new Scanner(System.in);
inputString = s.nextLine();
if (!inputString.matches("([+-]?([0-9]*[.])?[0-9]+)")) {
System.out.println("Not a Number");
}
else {
Double result2 = getNumber(inputString);
System.out.println("result = " + result2);
}
}
public static Double getNumber(String number) {
Double result = 0.0;
Double beforeDecimal = 0.0;
Double afterDecimal = 0.0;
Double afterDecimalCount = 0.0;
int signBit = 1;
boolean flag = false;
int count = number.length();
if (number.charAt(0) == '-') {
signBit = -1;
flag = true;
}
else if (number.charAt(0) == '+') {
flag = true;
}
for (int i = 0; i < count; i++) {
if (flag && i == 0) {
continue;
}
if (afterDecimalCount == 0.0) {
if (number.charAt(i) - '.' == 0) {
afterDecimalCount++;
}
else {
beforeDecimal = beforeDecimal * 10 + (number.charAt(i) - '0');
}
}
else {
afterDecimal = afterDecimal * 10 + number.charAt(i) - ('0');
afterDecimalCount = afterDecimalCount * 10;
}
}
if (afterDecimalCount != 0.0) {
afterDecimal = afterDecimal / afterDecimalCount;
result = beforeDecimal + afterDecimal;
}
else {
result = beforeDecimal;
}
return result * signBit;
}
}
Integer.parseInt
।