2016-03-09 2 views
-2

Есть ли эффективный/чистый способ определить, содержит ли String последовательность символов, которая может быть интерпретирована как: a) Целое число b) Двойное c) Если a или b don 't применить, то это буквенно-цифровой?Определить строку целую или двойную или обычную строку

+0

@Jens: Что такое? – Jim

+0

@Jim Integer.valueof (..), Double.valueOf (..) – Jens

+0

@Jens: Я знаю, как преобразовать строку в Integer или Double. Я спрашиваю, как определить, содержит ли строка последовательность, которая является допустимым целым или двойным. – Jim

ответ

4

Да. Вы можете использовать методы:

String text = "1000"; 
try { 
    Integer.valueOf(text); 
} catch (NumberFormatException ex) { 
    System.out.println("not integer"); 
} 
try { 
    Double.valueOf(text); 
} catch (NumberFormatException ex) { 
    System.out.println("not double"); 
} 
0
if ((variable == Math.floor(variable)) && !Double.isInfinite(variable)) { 
    // ... 
} 
2

Это зависит от того, хотите ли вы, чтобы поддержать национальную версию или нет.

Так у вас есть 2 варианта:

  1. Не используйте Locale

    • Просто попробуйте Integer.parseInt и Double.parseDouble
  2. Проверка на конкретной Locale/Язык

    • Используйте шаблон для проверки или NumberFormat
1

Предполагая, что ваши номера записываются в виде языка обычного программирования (например, десятичные разделители точки и т.д.), вы можете попробовать использовать регулярные выражения:

import java.util.regex.Pattern; 

class Test { 

    private static String typeOfThing(String text) { 
    if (Pattern.matches("[+-]?[0-9]+", text)) { 
     return "integer"; 
    } else if (Pattern.matches("[+-]?(([0-9]+\\.[0-9]+)|([0-9]+(\\.[0-9]+)?e[+-]?[0-9]+))", text)) { 
     return "double"; 
    } else return "other"; 
    } 

    public static void main(String[] args) { 
    System.out.println(typeOfThing("+123")); // integer 
    System.out.println(typeOfThing("123")); // integer 
    System.out.println(typeOfThing("-123")); // integer 
    System.out.println(typeOfThing("123.456")); // double 
    System.out.println(typeOfThing("-1.123e-10")); // double 
    System.out.println(typeOfThing("123hello")); // other 
    } 
} 

выше, является лишь доказательством концепции, она касается научной нотации, но могут отсутствовать некоторые крайние случаи (например, NaN s и т.д.). Кстати, собственный десятичный парсер для Java довольно intense.

+0

Вам также необходимо разрешить + в. 123.456e + 123. –

+0

Исправлено, спасибо за указание! – Vlad

+1

Конечно, неясно, спрашивает ли он, является ли строка лексически целочисленным или двойным, или может ли он фактически _fit_ в любом из типов Java Integer или Double. –

0

Используйте это, чтобы знать, если данная строка является целым числом или не

Примечание: она возвращает истину для bigintegers слишком

entered_string.matches("\\d+") 

Чтобы узнать, если введенная строка с плавающей точкой попробовать этот

Pattern p = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+$"); 
    Matcher m = p.matcher(entered_string); 

Если вы хотите знать, является ли данная строка просто строкой, попробуйте это

Pattern p = Pattern.compile("^[a-zA-Z]*$"); 
    Matcher m = p.matches(entered_string);//as you requested for plain text 
Смежные вопросы