2015-05-07 2 views
0

У меня есть большая строка, которая содержит числа и текст. Теперь я хочу точно указать число из этой строки. Число начинается каждый раз с «6» и тремя «0», но число может быть разными цифрами. Для примера здесь является попытка:Номер извлечения из строки

String text1 = "ID 6 IDENTIFICATION NUMBER 600026821 NAME: BECK POSTCODE 60025"; 

if(text1.contains("6000")) 
    { 
     System.out.println(text1.indexOf("6000")); 

    } 

Так как вы можете видеть, что строка может также содержит почтовый индекс цифры и идентификаторы. Но число, которое я хочу, всегда имеет ту же длину 9 цифр и начинается с «6000 ...».

Так как я могу извлечь этот номер?

Благодаря

EDIT

Хорошо, теперь я попробовать это одно:

String index = "6000"; 
      String text1 = "ID 6 IDENTIFICATION NUMBER 600026821 NAME BECK POSTCODE 60025"; 

      System.out.println(text1.indexOf(index)); 



      String number = text1.substring(text1.indexOf(index), text1.lastIndexOf(text1.indexOf(index) + 5)); 
      System.out.println(number); 

Она начинается, но заканчивается не правильно

+0

Вы можете смотреть на регулярных выражениях: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html –

+0

Вы почти там. Когда у вас есть индекс 6000 в строке, используйте подстроку, чтобы получить 9 символов после этого индекса. Обратите внимание, что вызов содержит() бесполезно, поскольку indexOf() предоставляет вам ту же информацию. –

+1

Посмотрите на регулярные выражения. Сейчас я попытаюсь придумать пример, но вы должны иметь возможность сказать, что вы можете извлечь любое число, начинающееся с 6000, и заканчивается либо пробелом, либо концом строки. Я не буду отправлять ответ, если не выясню точного регулярного выражения, которое вам понадобится. –

ответ

5

Regex может быть использован, как это:

public static void main(String args[]) { 
    String text1 = "ID 6 IDENTIFICATION NUMBER 600026821 NAME: BECK POSTCODE 60025"; 
    System.out.println(text1.replaceAll(".*?\\b(6000\\d+)\\b.*", "$1")); // replace everything except a number that starts with 6 and is followed by 000 with "". 

} 

O/P:

600026821 

Примечание: Вы можете использовать (6000\\d{5}) вместо (6000\\d+), если вы уверены, что количество цифр будет 9.

+1

@thanks - это и все остальные примеры, отлично работает;) – user3625342

+0

Будем надеяться, что его идентификатор не достигнет' 600000001', потому что это вызовет проблема: D. Может/должен отредактировать это регулярное выражение, чтобы начать поиск * «ИДЕНТИФИКАЦИОННЫЙ НОМЕР» *? – Tom

0

После того как вы индекс " 6000 "просто продолжайте, вы уже сказали, что длина всегда 9

int start = text1.indexOf("6000"); 
String yourNumber = text1.substring(start, start+10); 
+0

вы не получите '6000', и вы должны ... –

3
for (String word : s.split(" ")) { 
    int number = 0; 
    if (word.startsWith("6000")) 
     number = Integer.parseInt(word); 
    } 
} 

EDIT

Я не читал, что номер, который вы хотели всегда длины 9. В этом случае проверьте его длину в if состоянии:

if (word.startsWith("6000") && word.length() == 9) 
1

НЕТ:

System.out.println(text1.substring(text1.indexOf("6000"),text1 .indexOf("6000")+9)); 

int value=Integer.parseInt(text1.substring(text1.indexOf("6000"),text1 .indexOf("6000")+9)); 
0

Вы можете сделать это так, чтобы получить все числа в этой строке, которые следуют вашим правилам. Обратите внимание, что я добавил еще несколько номеров в text1 для тестирования.

package so; 

public class NumberExtractor { 

    public static void main(String[] args) { 

     String text1 = "ID 6 IDENTIFICATION NUMBER 600026821 NAME: BECK 600026822600026823 POSTCODE 60002682460025"; 

     boolean notAtTheEnd = true; 
     int currentIndex = 0; 
     while (notAtTheEnd) { 
      int start = text1.indexOf("6000", currentIndex); 

      if (start > -1) { 
       String number = text1.substring(start, start + 9); 
       currentIndex = start + 1; 
       System.out.println(number); 
      } else { 
       notAtTheEnd = false; 
      } 
     } 
    } 
} 
Смежные вопросы