2015-07-10 4 views
3
import java.util.*; 

class Test{ 
    private int intToken;  
    public Test(){ 
     intToken = 0;   
    } 
    // A method that returns the last character of a String 
    // This here returns a string regardless of input 
    public String lastChar(String tok){ 
     String token = String.valueOf(tok); 
     String strToken = token.substring(token.length()-1); 
     return strToken; 
    } 
    public static void main(String[]args){ 
     Test test = new Test(); 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter a number to get its last number"); 
     String value = scan.nextLine(); 
     System.out.println(test.lastChar(value)); 
    } 
} 

Метод, приведенный выше, lastChar() работает как для Integer, так и для строк. Поскольку я занимаюсь программированием, мне очень хотелось создать один метод, который возвращает либо String, либо Integer, но в рамках метода, который я хотел бы определить, является ли вход Integer или String.Это безопасная практика программирования?

Сразу после создания методов, я начал экспериментировать с

Scanner scan = new Scanner(tok); 
scan.hasNextInt(); 

вернулся false даже когда был в tokint.

Я также попытался

tok.contains("0,1,2,3,4,5,6,7,8,9"); 

Он также вернулся false даже когда был в tokint. Мне еще предстоит изучить тип char. но я заметил, что tok.contains("1"); вернулся true.

Я хотел использовать результат boolean для создания отдельных обработчиков для String и Integer. Ну код работает до сих пор.

Теперь мой вопрос, если это безопасно или хорошая практика, чтобы использовать один метод, как lastChar(), или я должен определить два различных метода lastInt() и lastStr()

+0

Числами имеют цифры (которые являются одной цифрой номера). Внутри они не хранятся в базе-10, поэтому вам нужно преобразовать их в base-10, чтобы получить последнюю цифру. – tucuxi

+0

Мне жаль, что я не понял, что это значит. Но, давая пример, я обязательно добавлю свои знания. Я пытался получить последний символ из кучки символов. Состоит из чисел, int, control char и т. Д. –

ответ

4

Я вы хотите знать, если значение строки является целым числом (например, «1234»), вы можете попытаться преобразовать строку: если есть исключение значение строки не является целым числом:

try{ 
    Integer.parseInt(tok); 
    return true; 
} catch(NumberFormatException ex) { 
    return false; 
} 
+0

Использование исключения в этом случае - неверная практика - исключения выполняются крайне медленно. Лучше проверить, что строка содержит только цифры, прежде чем пытаться ее проанализировать. Альтернативно напишите свой собственный целочисленный синтаксический анализатор (не сложно), который может изящно обрабатывать нецелые строки. – rossum

+0

В каком случае у вас были строки, смешанные с int? , вы не будете знать, было ли это чисто int, или главным образом Strings. То, что я хочу достичь, - проверить ток, если в нем есть какой-либо int, тогда я буду рассматривать его как String, а также проверить, есть ли какой-либо специальный символ, будь то алфавит, отличный от int, если он возвращает false, тогда я обрабатывать его как int –

+0

Это ужасно неэффективно, так как множественные входы замедлят всю вещь, почему нужно повышать? –

0
Scanner scan = new Scanner("tok'); 

Это должно быть либо одиночные кавычки или двойные кавычки, а не как

Также hasNextInt() определяет следующий токен сканер, является ли INT, конечно, это будет возвращать ложь, так как ваш вход не имеет Int

tok.contains("1"); 

Это проверка, если она содержит строка «1», а не номер 1

Ваш метод возвращает строку, а не строку и интервал. Даже если вход «1» будет рассматриваться как строки

Вы должны узнать больше о методах и что они возвращают

How to check the input is an integer or not JAVA?

Вы всегда можете проверить вход и использовать NumberFormatException или MismatchInputException

+0

Определяет несколько int int int = 1; int two = 2; и передавая их tok, содержит (один, два); Работа? Потому что tok.contains (0,1,2,3,4 и т. Д. 9); не работает –

+0

Пожалуйста, прочтите api для метода String contains() http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains(java.lang.CharSequence) –

0

Посмотрите на https://docs.oracle.com/javase/tutorial/java/data/index.html В нем рассказывается о различиях между числами и строками в Java. Для того, чтобы вернуть два разных типа данных, вам понадобится два метода.

+0

update ссылка пожалуйста –

0

Немного дополнение к ответам от andynaz и Хуан Чен
для предотвращения программирования на основе поймать это encourged использовать Googles Guava Library
в библиотеке у вас есть Ints.tryParse(String str)
которым возвращает нуль, если строка не может быть разобрано
и проанализирован Integer от ул иначе

надеялся, что это ответил на ваш вопрос

0

Если вы практикующий программирования, вы можете перебираем символов в строке, и обнаружить, если одна есть цифра с помощью Character класса

String x = getString(); 
    boolean hasNonDigits = false; 
    for(char c : x.toCharArray()){ 
     if(!Character.isDigit(c)){ 
      hasNonDigits = true; 
      break; 
     } 
    } 
    if(hasNonDigits){ 
     // It's not an integer 
    } 

Но если вы ищете более традиционный способ, использовать регулярное выражение с Pattern

Pattern p = Pattern.compile("\\D"); 
    String x = getString(); 
    boolean isInteger = !p.matcher(x).find(); 
Смежные вопросы