2014-09-18 3 views
1

Есть ли регулярное выражение, которое может быть использовано для замены только двух первых запятых в String с другим символом?Замена первых двух запятых строки

Причина, по которой я нуждаюсь в этом, заключается в том, что я работаю с тройками RDF, где мне нужно обрабатывать предмет, предикат и объект отдельно. Поэтому я разделил их на три отдельные части, используя метод String.split().

Это пример строки, которые мне нужно разделить:.

[http://dbpedia.org/resource/Tom_Mathisen, http://www.w3.org/2000/01/rdf-schema#comment, «Том Mathisen (родился 14 августа 1952) является норвежский комик, актер, сценарист и музыкант он обычно обрабатывает бас , гитаре и вокале. Он был в комедийной группе Prima Vera с 1976 по 1983 год вместе с Яном Тайеном и Иродом Фальском. Позже он продолжал работать с Геродом Фальском на многих телевизионных шоу и рекордах. «@ en]

Например, я хочу, чтобы эта строка выглядела так, вместо этого, поэтому я могу разделить, используя $:

[http://dbpedia.org/resource/Tom_Mathisen $ http://www.w3.org/2000/01/rdf-schema#comment $ "Tom Mathisen (родился 14 августа 1952 года) - норвежский комик, актер, сценарист и музыкант. Обычно он управляет басом, гитарой и вокалом. Он был в комедийной группе Prima Vera с 1976 по 1983 год вместе с Яном Тайеном и Иродом Фальском. Позже он продолжал работать с Херодс Фолск на многих телевизионных шоу/сцены и записи "@ ан]

Я сделал это в менее элегантный способ:..

StringBuilder stringbuilder = new StringBuilder(str); 
int commaCounter = 0; 
for (int i = 0; i < stringbuilder.length(); i++) { 
    if (stringbuilder.charAt(i) == ',') { 
     stringbuilder.setCharAt(i, '$'); 
     commaCounter++; 
     if (commaCounter == 2) { 
      break; 
     } 
    } 
} 
str = stringbuilder.toString(); 
+3

пример был бы лучше. Разве это разделение или замена? –

+1

Не просто лучше, пример абсолютно необходим в этом вопросе. – anubhava

+0

Я редактировал вопрос сейчас. Надеюсь, что это дает немного больше контекста для читателей. – Jea

ответ

6

Что-то вроде этого относительно прямолинейно?

String s = input.replaceFirst(",", "x").replaceFirst(",", "x"); 
+1

+1 для избежания регулярного выражения. Джейми Завински: «Некоторые люди, столкнувшись с проблемой, думают:« Я знаю, я буду использовать регулярные выражения ». Теперь у них две проблемы. – Bathsheba

+0

Спасибо. Не регулярное выражение, а гораздо более приятное решение. – Jea

+0

Хорошо, извините. Еще лучше;) – Jea

3

Используйте два раза replaceFirst Это будет делать то, что вы хотите Используйте forloop, если вы хотите заменить специфический символ первых n раз

String s = "this, is, a, Test"; 
    int count = 2; 
    for(int i = 0; i < count; i++) 
     s = s.replaceFirst(",", ""); 
    System.out.println(s); 

Выход:.. this is a, Test

Или, если вы всегда хотите заменить только первые два символа, вы можете связать методы.

String s = "this, is, a, Test"; 
    s = s.replaceFirst(",", "$").replaceFirst(",", "$"); 
+1

Зачем нужен цикл? просто используйте replaveFirst дважды –

+0

Чтобы сделать код более динамичным. – kai

+2

Мне нравится это решение. Его масштабируемость. – TheLostMind

1

Если вы хотите заменить запятую, вы можете позвонить replaceFirst 2 раза. Например:

String someString = "a, b, c, d"; 
    someString = someString.replaceFirst(",", "-"); 
    someString = someString.replaceFirst(",", "-"); 

    System.out.println(someString); 

Выход:

a- b- c, d 
1

Вы можете разделить ваш текст с кулак два , непосредственно следующим образом. Для разделения не нужно заменять , на $.Это слишком много разрывается с первых двух ,;

String str="http://dbpedia.org/resource/Tom_Mathisen, http://www.w3.org/2000/01/rdf-schema#comment, \"Tom Mathisen (born 14 August 1952) is a Norwegian comedian, actor, screenwriter and musician. He usually handles bass, guitar and vocals. He was in the comedy group Prima Vera from 1976 to 1983 along with Jahn Teigen and Herodes Falsk. Later he continued to work with Herodes Falsk on many TV/scene shows and records.\"@en"; 
String[] arr=str.split(",",3); 
for (String i : arr) { 
     System.out.println(i); 
} 

вне положенное:

http://dbpedia.org/resource/Tom_Mathisen 
http://www.w3.org/2000/01/rdf-schema#comment 
"Tom Mathisen (born 14 August 1952) is a Norwegian comedian, actor, screenwriter and musician. He usually handles bass, guitar and vocals. He was in the comedy group Prima Vera from 1976 to 1983 along with Jahn Teigen and Herodes Falsk. Later he continued to work with Herodes Falsk on many TV/scene shows and records."@en 
+0

Хорошая работа, но OP хотят заменить первые 2 ',' не разделить –

+0

@amitbhardwaj конечная цель OP, похоже, разделена с первых двух ',' –

+0

читать комментарии ниже вопроса, вы поймете конечную цель OP –

0

решение на основе регулярных выражений,

System.out.println("a, b, c, d".replaceAll("^([^,]*),([^,]*),", "$1X$2X")); 

Выход:

aX bX c, d 

DEMO

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