2013-03-20 2 views
3
String weapon = "pistol . <1/10>"; 
Result: 
int clip = 1; 
int ammo = 1; 

формат строки = (ОРУЖИЕ). < (CLIP)/(AMMO)>
И мне нужны значения Clip и Ammo.Извлечение 2 Целые числа от строки

Так как я могу извлечь эти два значения строки. я могу разделить его на «/» им будет по-прежнему сталкиваются: «пистолет < 1» и «10>»
Заранее спасибо

+0

http://docs.oracle.com/ javase/1.5.0/docs/api/java/lang/String.html # substring (int, int) – rajesh

ответ

6

Вы можете удалить символы, не цифры, как это:

String s = "pistol . <1/10>"; 
String[] numbers = s.replaceAll("^\\D+","").split("\\D+"); 

Теперь numbers[0] является 1 и numbers[1] является 10.

  • s.replaceAll("^\\D+","") удаляет НЕРАСПРОСТРАНЕНИИ значные символы в начале строки, так что новая строка теперь "1/10>"
  • .split("\\D+") расщепляется на не цифровых символов (в данном случае / и >) и игнорирует замыкающие пустые строки, если любой

в качестве альтернативы, если формат всегда точно так, как вы упомянули в вашем вопросе, вы можете посмотреть на этой конкретной Патти р-н:

private final static Pattern CLIP_AMMO = Pattern.compile(".*<(\\d+)/(\\d+)>.*"); 

String s = "pistol . <1/10>"; 
Matcher m = CLIP_AMMO.matcher(s); 
if (m.matches()) { 
    String clip = m.group(1); //1 
    String ammo = m.group(2); //10 
} 
+0

Спасибо, есть ли возможность получить название оружия также? (So Я получил 2 целых числа и 1 строку) – user1621988

+0

@ user1621988 со вторым подходом, что-то вроде: 'Pattern p = Pattern.compile ("\\ b (\\ w +) \\ b. * <(\\ d +)/(\\ d +)>. *"); 'будет работать. Оружием будет 'm.group (1)', клип будет 'm.group (2)' и ammo 'm.group (3)'. – assylias

0

И то и разделить результирующие подстроки на «<» (пистолет < 1) и ">" (10>) соответственно

1
String weapon = "pistol . <1/10>"; 

String str = weapon.substring(weapon.indexOf("<")+1,weapon.indexOf(">")); // str = "<1/10>" 

int clip = Integer.parseInt(str.substring(0,str.indexOf("/"))); // clip = 1 

int ammo = Integer.parseInt(str.substring(str.indexOf("/")+1)); // ammo = 10 

клип = 1

патроны = 10

Готово ..

1

Вы можете попробовать это тоже ...

Распаковка Значения ОРУЖИЕ, CLIP и AMMO из String «(ОРУЖИЯ). < (CLIP)/(АММО)> "

String str = "(WEAPON) . <(CLIP)/(AMMO)>"; 
Pattern pattern = Pattern.compile("\\((.*?)\\)"); 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

Извлечение значения 1, 10 из строки" пистолета. < 1/10> ":.

List<String[]> numbers = new ArrayList<String[]>(); 
String str = "pistol . <1/10>"; 
Pattern pattern = Pattern.compile("\\<(.*?)\\>"); 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) { 
    numbers.add(matcher.group(1).split("/")); 
} 
0

Вы можете попробовать что-то вроде этого

public static void main(String[] args) { 
    String weapon = "pistol . <1/10>"; 
    String test = ""; 

    Pattern pattern = Pattern.compile("<.*?>"); 
    Matcher matcher = pattern.matcher(weapon); 

    if (matcher.find()) 
     test = matcher.group(0); 

    test = test.replace("<", "").replace(">", ""); 
    String[] result = test.split("/"); 

    int clip = Integer.parseInt(result[0]); 
    int ammo = Integer.parseInt(result[1]); 
    System.out.println("Clip value is -->" + clip + "\n" 
      + "Ammo value is -->" + ammo); 
} 

Выход:

Clip value is -->1 
Ammo value is -->10 
1
String weapon = "pistol . <1/10>"; 
Pattern p = Pattern.compile("\\d+"); 
Matcher m = p.matcher(weapon); 
List<Integer> numbers = new ArrayList<Integer>(); 
while (m.find()) { 
    numbers.add(Integer.parseInt(m.group())); 
} 
System.out.println("CLIP: " + numbers.get(0)); 
System.out.println("AMMO: " + numbers.get(1)); 
Смежные вопросы