2016-11-24 14 views
5

Trong trường hợp của tôi, người dùng có thể nhậpTôi có thể trích xuất không. 2 chữ số từ chuỗi thành số nguyên?

f 0 ,f 1, f 2//1 digit 
p 0, p 1 ,p 2//1 digit 
j 0 1, j 0 2, j 1 0....(any combination of 0,1,2) //2 digits 
q ,Q //for quit 

tôi sử dụng

 str = scanner.nextLine();//get the whole line of input 
if(str.matches("[fpjq]\\s[012]"))......//check vaild input 
      char1=str .charAt(0);//get the first letter 

Sau đó, tôi muốn có được chữ số tiếp theo bây giờ.

Bất kỳ phương thức chuỗi nào có thể trích xuất chữ số tiếp theo từ chuỗi thành định dạng Int?

Tuy nhiên, một số lỗi vẫn tồn tại đối với phương pháp của tôi. Ví dụ: nó có thể thoát khỏi chương trình cho QQ hoặc qq hoặc q + bất kỳ chữ cái nào

Bất kỳ phương pháp nào tốt hơn cũng có thể được cung cấp?

chỉnh sửa

ví dụ p 0 1 CHAR1 = str .charAt (0); // lấy p bây giờ tôi muốn nhận được 0 và 1 và lưu trữ vào int

+0

Bạn có thể cho chúng tôi biết chính xác những gì bạn muốn trích xuất từ ​​dòng đầu tiên không? –

+0

Bạn có nghĩa là 'str.charAt (2);'? –

+0

@Scary Wombat Tôi đã thử .Tôi nghĩ rằng nó có mã ascil, như 48.68 ... – evabb

Trả lời

2

Bạn có thể sử dụng capturing groups(...) tại của bạn regex để trích xuất các phần của dữ liệu được đối sánh:

str = scanner.nextLine(); 
Pattern regex = Pattern.compile("^([fpjq])(?:\\s+([012]))?(?:\\s+([012]))?$"); 
Matcher matcher = regex.matcher(str.trim()); 
if (matcher.find()) { 
    String letter = matcher.group(1); 
    String digit1 = matcher.group(2); // null if none 
    String digit2 = matcher.group(3); // null if none 
    // use Integer.parseInt to convert to int... 
} else { 
    // invalid input 
} 
0

Tôi sẽ chia nhỏ trên không gian.

String input = "j 0 1"; 
String[] parts = input.split(" "); 

String command = parts[0]; 
int arg1 = Integer.parseInt(parts[1]); 
int arg2 = Integer.parseInt(parts[2]); 
+0

Mạnh mẽ hơn sẽ là '.trim()' rồi chia thành '\ s +' – qxz

Các vấn đề liên quan