2014-11-10 6 views
-1

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

Это в этой форме (рисунок) [A-H][1-8] Из строки, длина которой неизвестна.
Так, например, если моя строка " F5 F4 E3 " Я хочу назначить F5 переменной, F4, переменной E3 другой переменной.

Или, если моя строка будет " A2 " Я хотел бы назначить A2 переменной.
У меня есть ощущение, что я должен использовать Array для хранения значений.
Обратите внимание, что между желаемым рисунком находятся пробелы "blankE2blank".

Это мой код до сих пор:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import java.util.Arrays; 

public class List { 
    public static void main(String[] args) { 

     int i = 0; 
     char[] Wanted = new char[]{?}; // What should I use here? 
     Pattern pat = Pattern.compile("\\s*d+\\s*D+\\s*d+"); 
     String Motherstring = " F5 F4 E3 "; // this is just an example but the extraction should work for every string 
     Matcher m = pat.matcher(Motherstring); 
     while (pat.find()) { 
      Wanted[i] = pat; // ? 
      i++; 
     } 
    } 
} 
+3

Просто используйте 'Струнный # split' разделить ввод пробелом' "\\ s +" 'и обработать полученный массив' String [] ' – anubhava

ответ

0

Вы можете использовать \b якорь. Ниже приведенный вручную пример, я его не тестировал. Это просто показывает идею.

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import java.util.Arrays; 

public class List { 
    public static void main(String[] args) { 

     int i = 0; 
     char[] Wanted = new char[3];// Instead of array any dynamic collection should be used here. Since I'm not familiar with Java collections enough, Im leaving array here for correct work 
     Pattern pat = Pattern.compile("\\b\\w+\\b"); 
     String Motherstring = " F5 F4 E3 "; 
     Matcher m = pat.matcher(Motherstring); 
     while (pat.find()) { 
      Wanted[i]= pat.group(); 
      i++; 
     } 
    } 
} 
+0

Благодаря миллиона, наконец, понял это! – Kisos

+0

Надеюсь, это поможет и другим! – Kisos

+0

На самом деле, я рад, что вы позаботились о моем комментарии и дали отзыв, поэтому вы уже прошли простой фильтр со всех других криков «omg y u downvotes», поэтому теперь я могу поговорить с вами о вашем коде. Цель и поток понятны, но вы не поняли, что: 1. Поля не называются семантикой Java 'camelCasing' 2. Шаблон не был достаточно ограничительным, и вы могли упростить инициализацию char: – Unihedron

1

Не используйте массив. Используйте List. Размер динамический и позволяет вам add объектов. См. Это:

Pattern pattern = Pattern.compile("[A-H][1-8]"); 
Matcher matcher = pattern.matcher(" F5 F4 E3 "); 

// Create a new list (ArrayList) to store Strings. 
ArrayList<String> list = new ArrayList<>(); 

// For every match of the regexp in the test string: 
while (matcher.find()) 
    // Add the match to the list. 
    list.add(matcher.group()); 

System.out.println(list); 

online code demo. В STDOUT напечатает:

[F5, F4, E3] 
+0

Согласен, динамичная коллекция - лучшая здесь – neleus

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