2013-12-08 1 views
0

У меня проблема с заменой раздела строки в массиве. В основном, у меня есть строка, которая содержит:Как заменить раздел строки в массиве?

связь (att1, ATT2, att3) \ nRelation (att1, ATT2, att3)

я разделить строку, основанную на "\ п" и хранится в массиве : [Соотношение (att1, ATT2, att3), соотношение (att1, ATT2, att3)]

Моя проблема замены этого участка строки: (att1,att2,att3) к ( ) для каждого элемента в массиве. Вот отрывок из моего кода:

  String txt = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)"; 
      StringBuilder sb = new StringBuilder(); 
      sb.append(txt); 
      String[] myArray = sb.toString().split("\n"); 
      int startIdx = sb.indexOf("("); 
      int endIdx = sb.indexOf(")"); 
      int i; 
      for(i=0; i<myArray.length; i++){ 
       myArray[i] = myArray[i].replace(startIdx,endIdx,"(  )"); 
      } 
      System.out.println("---- Single Array ------"); 
      System.out.println(Arrays.toString(myArray)); 

Проблема является линия внутри для цикла, это дает мне ошибки, заявив

«заменить (Char, Char) в типе String, не применяется для аргументов (Int, Int, String)»

Я исследовал другие способы, но ничего, как близко к использованию StringBuilder и IndexOf, чтобы удовлетворить мои потребности не нашли. Любые предложения о том, как это решить?

+0

Таким образом, вы в основном хотят, чтобы заменить все внутри скобок одним пробелом? – Blub

+0

Метод 'replace', который вы пытаетесь вызвать в классе строк, не принимает двух индексов. – merlin2011

+0

@ EdgarBoda Да, так, например, (a, b, c) заменить на() – user11998

ответ

1

Невозможно заменить какой-либо конкретный раздел такой строки. Вы можете разделить из начальных и конечных частей с двумя подстрока вызовов вместо:

myArray[i] = myArray[i].substring(0, startIdx) + 
    "(  )" + myArray[i].substring(endIdx + 1); 

Вы можете сделать это более просто с регулярным выражением, хотя:

String txt = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)"; 
String[] myArray = txt.replaceAll("\\(.*?\\)", "(  )").split("\n"); 
+0

Это регулярное выражение, которое вы использовали в скобках? – user11998

+0

@ пользователь3080993 Да. – Boann

+0

Ahh хорошо, спасибо кучу. Думаю, мне следует читать регулярное выражение, так как это станет очень удобно в будущем. – user11998

1
  • Функция string.replace имеет два аргумента: replace(CharSequence target, CharSequence replacement) и replace(replace(char oldChar, char newChar). Но вы пытаетесь предоставить три: replace(startIdx, endIdx, "( )").

  • replaceAll(regex, replacement) функция для замены всех (X) на () сперва.

  • , а затем разбить строку вокруг \n

    String str = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)".replaceAll("\\(.*\\)", "()"); 
    
    String splitStr[] = str.split("\n"); 
    
+0

Да, я понял, что когда я затмеваюсь, я рассказал о проблеме с .replace. – user11998

+0

@ user3080993, проверьте обновленный ответ – Sage

+0

Ahh okay, я слышал о регулярном выражении, но это выглядит пугающе читать его, когда я делал PHP. Я буду помнить об этом, поскольку, вероятно, буду часто использовать регулярное выражение в будущем – user11998

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