2013-09-27 3 views
0

я получаю строку в этом формате TEST [52.5, 77.5]форматировать строку, чтобы сформировать новую строку из него

С этой строкой выше получил я хочу, чтобы сформировать два элемента, как показано ниже

TEST 52.5 

TEST 77.5 

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

public class Test { 
    public static void main(String args[]) throws Exception { 
     String string = "TEST [52.5, 77.5]"; 
     String strModf = string.replaceAll("\\[", " "); 
     String newStr = strModf.replaceAll("\\]", " "); 

     // Used StringBuffer here but not able to succeed . 

    } 
} 

ответ

3

Я хотел бы сделать что-то вроде этого:

String str = "TEST [52.5, 77.5]"; 
Pattern p = Pattern.compile("(.*?)\\s*\\[(.*)\\]"); 
Matcher m = p.matcher(str); 

if (m.find()) { 
    String first = m.group(1); 
    String[] others = m.group(2).split("\\s*,\\s*"); 

    for (String other : others) 
     System.out.println(first + " " + other); 
} 
 
TEST 52.5 
TEST 77.5 
+2

Это не будет работать для 'TEST [52, 77.5]'. –

+0

Я взял строку HFC 18 января 2014 года [16.0, 18.0, 21.0, 23.0, 24.5] и ее не работает. – Pawan

+0

@PreethiJain Если у вас есть более сложный пример, можете ли вы поместить его в вопрос? – arshajii

0

Самое простое решение, которое я могу придумать:

String string = "TEST [52.5, 77.5]"; 
    String strFirst = string.replaceFirst("\\[", "").replaceFirst(",.*", ""); 
    String strSecond = string.replaceFirst("\\[.*,\\s+", "").replaceFirst("\\]", ""); 
    System.out.println(strFirst); 
    System.out.println(strSecond); 

выходов

TEST 52.5 
TEST 77.5 

От regex apidoc:

.           Любой символ (может быть или может не соответствовать терминаторы линии)
Х *       Х, ноль или более раз
\ S       символ пробела: \ р {IsWhite_Space}
Х +       X, один или несколько раз

+0

спасибо за ответ, это выглядит хорошо, но я могу иметь больше элементов в квадратных скобках. – Pawan

+0

добро пожаловать. вы должны были заметить, что в вопросе, хотя. – linski

2

Поскольку числа внутри квадратных скобок могут меняться, я бы предложил несколько иной подход к растяжимости rea сын:

String s = "TEST [52.5, 77.5, 86.5]"; 
String slist = s.replaceAll("^.*?\\[\\s*([^\\]]+)\\s*\\]", "$1"); 
String fword = s.substring(0, s.indexOf(' ')+1); 
for (String t : slist.split(",\\s*")) 
    System.out.println(fword + t); 

ВЫВОД:

TEST 52.5 
TEST 77.5 
TEST 86.5 
0

Если you'r не регулярное_выражение вентилятор вы можете сделать некоторые вещи, как это (hugly? нет !!!):

String str = "TEST [75.1, 7.52]";

String root = str.substring(0, str.indexOf('['));

String elements = str.substring(str.indexOf('[')+1, str.indexOf(']'));

String[] parts = elements.split(",");

String elem1 = root+ " " + parts[0];

String elem2 = root+ " " + part[1];

Немного более подробный, я знаю.

+0

bte 'String # split' также использует regex – anubhava

+0

да, но реально проще понять, чем сложные paterns (я не очень умный кодер на самом деле ...) – Nemesis

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