2012-05-08 2 views
0

У меня есть строка, которая всегда строится как Mfr Part#: MBRB1045G Technologie ... или Mfr Part#: MBRB1545CTT4G Mounting, так что всегда есть Mfr Part#: то partnumber я хочу извлечь, а затем это сопровождается либо Technologie или Mounting повлекло за собой другие символы.Извлечение строки

Как бы вы извлекли этот номер части MBRB1045G?

+8

Я бы просто разделился на пространство и взял 3-й элемент. –

+1

@ GilbertLeBlanc добавил эллипсис после «Технолог», он может иметь кратные «части» в каждой строке, в этом случае расщепления недостаточно. – KurzedMetal

+0

Если ему нужно найти строку с этим шаблоном, чтобы затем извлечь часть #, ему понадобится регулярное выражение. Если у него уже есть строка в руке и просто хочет часть #, он может просто использовать split. Мне непонятно, что это так. – alan

ответ

3

Это должно сделать трюк:

final Pattern pattern = Pattern 
      .compile("Mfr Part#: ([^ ]+) (Technologie|Mounting).*"); 
    final Matcher matcher = pattern 
      .matcher("Mfr Part#: MBRB1045G Mounting"); 
    matcher.matches(); 
    System.out.println(matcher.group(1)); 

Однако, если это не важно для вас, чтобы проверить, что строка имеет конкретную модель, вы можете также использовать более простое выражение: Mfr Part#: ([^ ]+) .*

Также обратите внимание на что вы можете сохранить объект шаблона и повторно использовать его для последующего использования. Это даст вам лучшую производительность.

+0

Не найдено совпадений с «Номер заказа Mfr: MBRB1545CTG Способ монтажа: ...» или «Номер Mfr: MBRB1045-E3/45 Technologie: Surface Moun ...» –

+0

О, если у вас есть дополнительные символы конца, регулярное выражение имеет будет слегка скорректирована. Позвольте мне исправить это в моем ответе. – rolve

+0

Отлично, спасибо, много! –

0

Я бы, вероятно, использовал java.util.Scanner. Это может быть не оптимальный способ сделать это, но в моем oppinion наиболее комфортно.
Она будет работать следующим образом:

import java.util.Scaner; 

String s = "Mfr Part#: MBRB1045G Technologie RZ137GA"; 
Scanner scn = new Scanner(s); 
scn.next(); 
scn.next(); 
String partnumber = scn.next(); 
scn.next(); 
String technologie = scn.next(); 
scn.close(); 

Переменная partnumber будет содержать MBRB1045G и technologie содержит RZ137GA.

0

Возможно, правильное выражение с группировкой было бы лучше. (Google для perlre)

String input = "Mfr Part#: MBRB1045G Technologie"; 
String regexpression = "Mfr Part#: (\\w+) (\\w+)"; 
Pattern p = Pattern.compile(regexpression); 
Matcher m = p.matcher(input); 
if (m.matches()) { 
    String part = m.group(1); 
    String desc = m.group(2); 

    System.out.println(part); 
    System.out.println(desc); 
} 
0

Я вижу два пути, чтобы сделать это (и, вероятно, другие): регулярное выражение и группы, или IndexOf и подстроку

1) РегВыр и группы

String input = "Mfr Part#: MBRB1045G Technologie"; 
Pattern p = Patter.compile("Mfr Part#: ([A-Z0-9]+) (Technologie|Mounting)"); 
Matcher m = p.matcher(input); 
while(m.find()) { 
    System.err.println("Part number: "+m.group(1)+ "Second part is "+m.group(2); 
} 

2) IndexOf и подстрока

String prefix = "Mfr Part#: "; 
String input = "Mfr Part#: MBRB1045G Technologie"; 
for (int i= 0;i<input.length();i++) { 
    int index1 = input.indexOf(prefix); 
    int index2 = index1+prefix.length(); 
    int index3 = input.indexOf(" ",); 
    int index4 = input.indexOf(" ", index3+1); 
    System.err.println("Part number: "+input.substring(index2, index3) 
      + "Second part is "+input.substring(index3, index4); 
    index = index4; 

} 

Предостережения: Я не запускать его, так что вы, возможно, придется исправить опечатки.

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