public static void main(String argv[]){
String a="0700";
Scanner s = new Scanner(a);
while(s.hasNextLong()){
System.out.print(s.nextLong()+",");
}
結果將是「700」,而不是「448」。爲什麼java.util.Scanner不能將0700看作八進制文字?
public static void main(String argv[]){
String a="0700";
Scanner s = new Scanner(a);
while(s.hasNextLong()){
System.out.print(s.nextLong()+",");
}
結果將是「700」,而不是「448」。爲什麼java.util.Scanner不能將0700看作八進制文字?
默認情況下,掃描器假定數字是以10爲底的數字,並且會忽略前導0。如果你願意,你可以指定另一個基數 - 下面的代碼打印448:
public static void main(String[] args) {
String a = "0700";
Scanner s = new Scanner(a);
while (s.hasNextLong(8)) { //make sure the number can be parsed as an octal
System.out.print(s.nextLong(8)); //read as an octal value
}
}
閱讀documentation。它表示它將使用掃描儀的默認基數。如果默認值不可接受,則可以使用useRadix(int radix)
方法對其進行更改,或使用nextLong(int radix)
進行基數的臨時更改。
您可以使用Scanner#useRadix(radix)
方法來設置默認基數,或者將基數明確地傳遞給Scanner#hasNextLong(radix)
和Scanner#nextLong(radix)
方法。
s.hasNextLong() - > s.hasNextLong(8) – hoaz
@hoaz確實非常好。 – assylias
不是真的,只是爲了一致性,它將工作,沒有基數太多,我認爲 – hoaz