我正在做一個分數計算器,我已經有了所有的操作代碼。如何將字符串分數「2/6」轉換爲兩個整數? Java
但現在我想創建一個Scanner
,需要一個String
並轉換成(分子和分母)。
用戶輸入String
應採用以下格式:編號/編號。如果是別的,我會讓掃描儀再次出現。
我已經擁有的代碼可以處理負數Integers
,所以-
符號和0
不應該成爲問題。
我正在做一個分數計算器,我已經有了所有的操作代碼。如何將字符串分數「2/6」轉換爲兩個整數? Java
但現在我想創建一個Scanner
,需要一個String
並轉換成(分子和分母)。
用戶輸入String
應採用以下格式:編號/編號。如果是別的,我會讓掃描儀再次出現。
我已經擁有的代碼可以處理負數Integers
,所以-
符號和0
不應該成爲問題。
您可以隨時使用String.split()
分裂基礎上的分隔符字符串,在這種情況下/
,然後String.trim()
輸出,並分析他們獲得的分子和分母。
你可以使用一個正則表達式,在同一時間,實施正確的格式化字符串模式,並能夠提取分子和支配:
Pattern inputPattern =
Pattern.compile("\\A(?<numerator>-?\\d+)[ ]*\\/[ ]*(?<denominator>-?\\d+)\\z");
Matcher matcher = inputPattern.matcher(inputString);
if (matcher.matches()) {
//valid inputstring
int numerator = Integer.parseInt(matcher.group("numerator"));
int denominator = Integer.parseInt(matcher.group("denominator"));
} else {
letTheScannerAppearAgain();
}
這裏使用的模式包含兩個命名組由圓括號(..)
標記,並用斜線分隔(由於斜線在正則表達式中也有含義) 分子/分母可能以負號開始,並且應該至少包含一個數字。允許斜線前後的空格。
您可以將字符串拆分爲「/」,並按以下方式提取分子和分母。
public void scan(String string){
if(string.matches("-{0,1}[0-9]+\\/[0-9]+"){
String[] numbers = string.split("/");
int numerator = Integer.parseInt(numbers[0]);
int denominator = Integer.parseInt(numbers[1]);
}
else{
scan(string);
}
}
我覺得這是最好的答案,我沒有與java.util.regex.Matcher中和java.util.regex.Pattern中的很多經驗,因爲這賦值是一個基本的Java課程。但我會閱讀更多關於這個。謝謝! – Quetzy
我會這樣做,但是以輸入開始和結束符輸入('\\ A'和'\\ z')而不是起始符和結束符符號(' ^'和'$'),因爲你擁有它的方式,像'5/5 \ n6/7「這樣的字符串也會被匹配。 – tradeJmark
我也推薦使用命名捕獲組和數字之間的可選間隔(這更多的是根據你想要的可接受格式進行判斷),所以在我的情況下,正則表達式將變成'「\\ A(? - 使用這個正則表達式,組訪問變成了'matcher.group(「numerator」)''和''+'' matcher.group( 「分母」)'。更容易跟蹤正則表達式是否改變。 –
tradeJmark