บ่อยครั้งที่ข้อมูลเชิงสัญลักษณ์ที่ผู้ใช้ป้อนจากแป้นพิมพ์จำเป็นต้องแปลงเป็นตัวเลข มิฉะนั้นโปรแกรมเมอร์ควรได้รับตัวเลขจากข้อมูลนั้น มีบางวิธีใน Java ที่จะทำ ในบทความนี้ เราจะหาวิธีที่จะช่วยเราแปลงถ่านเป็นค่า int
การแคสต์ประเภทโดยนัย
Type Casting เป็นกระบวนการแปลงค่าของประเภทข้อมูลหนึ่งเป็นค่าของประเภทข้อมูลอื่น การหล่อประเภทอาจเป็นแบบแมนนวลหรือแบบอัตโนมัติขึ้นอยู่กับประเภท ประเภทควรเข้ากันได้ ใน Java เรามี typecasting สองประเภท คือแบบชัดแจ้งและโดยนัย Implicit สามารถทำได้ก็ต่อเมื่อเราแปลงตัวแปรจากประเภท "ใหญ่ขึ้น" เป็น "เล็กลง" (เช่น จากintเป็นlong). หากเราต้องการแปลงตัวแปรประเภท char เป็นประเภทข้อมูล int บ่อยครั้งเราต้องรับค่าที่เทียบเท่าจากตาราง ASCII ตัวอักษรหรือสัญลักษณ์ทุกตัวที่สามารถป้อนแบบดิจิทัลได้จะมีเลขจำนวนเต็มเฉพาะที่สอดคล้องกัน ตัวอย่างเช่น ตัวอักษร 'A' มีรหัส ASCII เท่ากับ 65 เรากำลังแปลงค่าอักขระให้เป็นรหัสเลขจำนวนเต็ม ASCII ที่เทียบเท่ากัน นี่คือตัวอย่าง Java char to int ของเราโดยใช้การหล่อแบบตัวอย่าง Java char ถึง int (โดยใช้ typeCasting)
package charToInt;
public class Implicit {
public static void main(String[] args) {
char char1 = 'A';
char char2 = 'a';
int x = char1;
int y = char2;
System.out.println("ASCII value of '" + char1 + "' is " + x);
System.out.println("ASCII value of '" + char2 + "' is " + y);
}
}
ผลลัพธ์คือ:
ค่า ASCII ของ 'A' คือ 65 ค่า ASCII ของ 'a' คือ 97
การหล่อประเภทที่ชัดเจน
ดังที่เราเห็นข้างต้น ในกรณีของการแปลง char เป็น int ไม่จำเป็นต้องทำเช่นนี้อย่างชัดเจน เนื่องจากใช้ 2 ไบต์เพื่อจัดเก็บ char และ 4 ไบต์ใช้เพื่อจัดเก็บ int นั่นคือประเภท int คือ "ใหญ่กว่า" อย่างไรก็ตาม ในแบบฝึกหัด เราสามารถแปลงตัวแปร char เป็นจำนวนเต็มได้ สำหรับการดำเนินการนี้ เราระบุ (int) ในวงเล็บ
package charToInt;
public class Explicit {
public static void main(String[] args) {
char char1 = 'A';
System.out.println("ASCII value of '" + char1 + "' is " + (int)char1);
}
}
ผลลัพธ์คือ:
ค่า ASCII ของ 'A' คือ 65
การใช้ getNumericValue()
getNumericValue()ทำงานคล้ายกับการแคสต์ประเภท แต่แทนที่จะทำตามตาราง ASCII จะเป็นไปตามมาตรฐานการเข้ารหัส Unicode ASCII สามารถแสดงชุดสัญลักษณ์และอักขระเฉพาะ เช่น อักษรละติน (รวมถึงสัญลักษณ์อักษรประจำชาติบางตัว) ตัวเลข เครื่องหมายวรรคตอน และอักขระควบคุม Unicode มีค่ามากกว่าล้านค่าที่มีตัวอักษรและสัญลักษณ์สำหรับทุกภาษาในโลก ตัวอย่างเช่น ค่าของ A ใน Unicode คือ \u0041 ซึ่งเทียบเท่ากับค่าตัวเลข 10 ถ้าอักขระไม่มีค่าตัวเลข เมธอดจะส่งกลับ -1 การใช้วิธีนี้อาจสะดวกที่จะคืนค่าจำนวนเต็มที่ไม่เป็นลบ
package charToInt;
public class UsingGetNumericValue {
public static void main(String[] args) {
char char1 = '7';
char char2 = 'A';
char char3 = '*';
int x = Character.getNumericValue(char1);
int y = Character.getNumericValue(char2);
int z = Character.getNumericValue(char3);
System.out.println("The Unicode value of '" + char1 + "' is " + x);
System.out.println("The Unicode value of '" + char2 + "' is " + y);
System.out.println("The Unicode value of '" + char3 + "' is " + z);
}
}
ผลลัพธ์คือ:
ค่า Unicode ของ '7' คือ 7 ค่า Unicode ของ 'A' คือ 10 ค่า Unicode ของ '*' คือ -1
การใช้ ParseInt()
ParseInt()เป็นอีกวิธีหนึ่งในการแปลงถ่านเป็น int นอกจากนี้ยังใช้กันอย่างแพร่หลายในการแปลงข้ามระหว่างประเภทข้อมูลตัวเลขอื่นๆ เช่น เลขทศนิยม เลขคู่ และเลขยาว ParseInt()ต้องการอย่างน้อยหนึ่งอาร์กิวเมนต์และมากที่สุดสองอาร์กิวเมนต์ อาร์กิวเมนต์แรกคือชื่อตัวแปรของค่าที่เรากำลังแปลง อาร์กิวเมนต์ที่สองคือ Radix ซึ่งอ้างอิงถึงค่าฐานของทศนิยม เลขฐานแปด เลขฐานสิบหก ฯลฯ เนื่องจากความสามารถของParseInt()ในการแปลงชนิดข้อมูลโดยคำนึงถึงระบบตัวเลขด้วย จึงเป็นตัวเลือกที่เหมาะสมที่สุดสำหรับการแปลง "ตัวเลข ” ถ่านเป็น int ใน Java มีสองประเด็นสำคัญที่ควรทราบหากคุณต้องการใช้วิธีนี้ แยกวิเคราะห์ ()วิธีการยอมรับอาร์กิวเมนต์ของสตริงเท่านั้น ดังนั้นคุณควรแปลงถ่านเป็นสตริงก่อน (โดยใช้String.valueOf ) คุณไม่สามารถใช้parseInt()เพื่อแปลงตัวอักษรหรือสัญลักษณ์อื่นๆ ยกเว้นค่าตัวเลขที่จัดเก็บไว้ในประเภทข้อมูล char หากคุณป้อนค่าที่ไม่ใช่ตัวเลข คุณจะได้รับข้อผิดพลาด นี่คือตัวอย่าง Java:
package charToInt;
public class ParseInt {
public static void main(String args[]){
char ch = '7';
int n = Integer.parseInt(String.valueOf(ch));
System.out.println(n);
}
}
ผลลัพธ์คือ:
7
ลองใช้ parseInt ton ค่าที่ไม่ใช่ตัวเลข:
package charToInt;
public class ParseInt {
public static void main(String args[]){
char ch = 'q';
int n = Integer.parseInt(String.valueOf(ch));
System.out.println(n);
}
}
ผลลัพธ์คือ:
ข้อยกเว้นในเธรด "main" java.lang.NumberFormatException: สำหรับอินพุตสตริง: "q" ที่ java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) ที่ java.base/java.lang.Integer.parseInt (Integer.java:652) ที่ java.base/java.lang.Integer.parseInt(Integer.java:770) ที่ charToInt.ValueOf.main(ValueOf.java:6)
ลบ '0'
มีวิธีง่ายๆ ในการแปลงอักขระเป็นจำนวนเต็ม ในการทำเช่นนี้ เพียงลบค่า ASCII ของอักขระ "0" ออกจากอักขระ ตัวอย่างเช่น หากต้องการรับ int 7 จากอักขระ "7":
int intValue = '7'-' 0 ';
โปรดทราบว่าสิ่งนี้ใช้ได้กับการรับค่า int เฉพาะสำหรับอักขระจำนวนเต็ม! หากคุณลบ '0' จาก 'A' เมธอดจะคืนค่าส่วนต่างระหว่างรหัส ASCII ที่เป็นศูนย์และตัวอักษร A ต่อไปนี้คือตัวอย่าง
package charToInt;
public class SubtractingZero {
public static void main(String[] args) {
char char1 = '7';
char char2 = 'A';
char char3 = '*';
System.out.println(char1);
System.out.println(char1 - '0');
System.out.println(char2);
System.out.println(char2 - '0');
System.out.println(char3);
System.out.println(char3 - '0');
}
}
ผลลัพธ์คือ:
7 7ก17*-6
ข้อสรุป
หากคุณต้องการแปลง char เป็น int ใน Java ให้ใช้วิธีใดวิธีหนึ่ง:- การหล่อประเภทโดยนัย // รับค่า ASCII
- Character.getNumericValue()
- Integer.parseInt() // จับคู่กับString.valueOf())
- การลบ '0' // ใช้ได้กับค่าตัวเลขที่เป็นจำนวนเต็มเท่านั้น
อ่านเพิ่มเติม: |
---|
GO TO FULL VERSION