2013-05-02 2 views
-1

Спасибо за ваше ценное время. Мне нужно взорвать мою строку и получить только цифру до Kr. (В Java)Получение длинной ценности из строки

Пример String str = "Delhi 205 Kr."

Сверху нужно только 205, как подстроки.

Другая проблема заключается в том, что предположим, что я получаю другую цифру в этой строке, тогда снова мне нужно только цифру перед пространством Kr.

Пример String str = "India112Delhi 98 Kr."

Здесь я также необходимо 98 не 112 или комбинацию обоих.

И если у меня есть String как это, то как получить значение 25 только?

String str = "New Delhi113 25 Kr."

Пожалуйста, помогите мне Спасибо заранее.

+0

Исследование regex .... –

+0

Можете ли вы ответить пожалуйста .. Не успевайте учиться глубоко. –

+0

Если у вас нет времени, по крайней мере посмотрите на метод 'split()' в классе 'String'. Это легко понять и, вероятно, сделает для вас работу здесь. – Magnilex

ответ

1

Просто разделите строку, используя функцию split, которая даст вам массив строк. Переверните его и попробуйте разобрать каждую строку в массиве. Поместите код синтаксического анализа в try {} catch {}, если синтаксический анализ был успешным, вы получили свой номер. else продолжить цикл.

String str = "Delhi 205 Kr."; 

String [] values ​​= str.split ("");

Длинное значение = 0;

for(int i=0; i<values.length; i++) 
    { 
      try { 
       value = Long.parseLong(values[i]); 
    break; 
      } 
     catch(Exception e) 
     {} 
    } 
} 
System.out.println(value); 
+0

Только улавливает первое число, окруженное пробелами. Что, если число до kr является вторым номером в строке? – Kurru

+0

@ Hardik4560 См. Отредактированный вопрос, пожалуйста. Что делать сейчас –

+0

Тот же самый ответ будет работать, поскольку 113 не имеет пробелов между ними. Этот код будет работать для всех чисел, окруженных пробелами. – Hardik4560

-1

Это решение применимо только в том случае, если ваши входные строки всегда в одном формате.

Вы можете разбить строку на основе пробелов.

что-то эквивалент:

String.split (»«)

Для входной строки India112Delhi 98 Кр. вы бы получить массив, который выглядит как:

[. India112Delhi, 98, Kr]

Ваш второй последний элемент всегда будет номер вам нужно!

1

Используйте это регулярное выражение в качестве шаблона:

(\d+) (K|k)(R|r)\.

И получить значение первой группы из Matcher.

Pattern pattern = Pattern.compile("(\d+) (K|k)(R|r)\."); 
Matcher matcher = pattern.matcher("India112Delhi 98 Kr."); 

if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 
1

С вашим данным образцом кодом (Обратите внимание, что это будет работать только тогда, когда вам нужно получить устройство от второго места)

String str = "Delhi 205 Kr."; 
String[] values = str.split(" "); 
Long value = Long.parseLong(values[1]); 

ОБНОВЛЕНО

String str = "Delhi 205 Kr."; 
String[] values = str.split(" "); 

Long value=0; 
for(int i=1; i<values.length; i++) 
{ 
    if(values[i].equalsIgnoreCase("kr.")) 
    { 
     try { 
      value = Long.parseLong(values[i-1]); 
     } 
     catch(Exception e) 
     { 
      System.out.println("Not a number before Kr"); 
     } 
    } 
} 
System.out.println(value); 

ПРИМЕЧАНИЯ Второй код получит значение перед «Kr».

+0

Точно, что я сказал в своем ответе, вы можете игнорировать проверку if. – Hardik4560

+0

Anyways 'if' check не добавляет к сложности времени, а точнее Big-Oh. Кроме того, зачем вообще исключать исключение, когда его можно легко проверить – asifsid88

+0

Всегда печатает 0 :( –

0

Некоторый код, который использует Guava, моя основа Java выбора :)

String str = "..."; // input string 

int indexOf = str.indexOf("Kr"); // get the index of Kr 
String previous = str.substring(0, indexOf); // only get string before kr 

// Split string on all non-digits and throw away any empty splits. 
// This leaves you with only numbers 
Iterable<String> numbers = Splitters.onPattern("\\D").omitEmptyStrings(); 
// Get the last of the numbers since this one is next to the Kr. 
Long output = Long.parseLong(Iterables.getLast(numbers)); 
0

Эй спасибо всем, но реальный и правильный ответ здесь. Нам нужно зацикливаться со спины

    String cost= "Nay String 205 Kr."; 
        String[] values = cost.split(" "); 
        Long value=(long) 0; 
        for(int i=values.length; i>0; i--) 
        { 
          try { 
           value = Long.parseLong(values[i]); 
        break; 
          } 
         catch(Exception e) 
         {} 
        } 
0

Будет ли это работать на вас?
String str = "India112Delhi 98 Kr.";

String [] strarray = str.split(" ");

System.out.println(Long.parseLong(strarray[strarray.length-2]));

Смежные вопросы