2016-12-20 7 views
0

Я использую Java и то, что я хочу сделать, это очень просто:Как заменить строку с помощью регулярного выражения?

  • Я хочу, чтобы получить второй характер конкретного слова,

  • Тест этот символ, если он равен «а» заменить его на 0, если равен «Ь» заменить его на «1»

  • выражение должно быть в одной строке (с использованием регулярных выражений)

Что-то вроде:

input = input.match(/^.(.)/) == "a" 
? input.replace(/^.(.)/, "0") : input.match(/^.(.{1})/) == "b" 
? input.replace(/^.(.)/, "1") : input 

Я хочу знать, если есть какие-либо оптимизированы и чистый способ сделать это. Заранее спасибо.

+0

Там нет никакого способа сделать это в 1 строку с регулярным выражением Java, потому что вам нужно заменить шаблон с 2-мя различными строками замены и этот текст отсутствует матч. –

+3

Почему многие люди делают '. {1}'? Как вы считаете, разница в '.' – Fallenhero

+0

Почему нечетное требование использовать регулярное выражение вообще? Есть гораздо более простые способы получить вторую букву строки ... –

ответ

0

Если я вас правильно понимаю, вы можете попробовать это.

input.replaceFirst(/^(.)a/, '$10').replaceFirst(/^(.)b/,'$11') 

Значение: ^ начало строки (.) матч 1 символ и захватить

Используйте этот захват в замене

+0

На самом деле, на Java вы должны использовать 'replaceFirst ("^(.) A "," $ 10 "). ReplaceFirst ("^(.) B "," $ 11 ")' –

+0

Ну, это было Java, а не JS. В чем отличие «замены»? – Fallenhero

+0

'replaceFirst' заменяет только первое вхождение. Просто чтобы соответствовать образцу. В противном случае вы также можете использовать '.replaceAll' (это эквивалент шаблона JS на основе'/g', как в 's.replace (/(.)./ g," $ 10 ")'). –

0

Проверьте с этим кодом может помочь вам.

StringBuilder str = new StringBuilder("aqbcdefag"); 
    Pattern pat = Pattern.compile("^(.)(a|b){1}.*"); 
    Matcher m = pat.matcher(str); 
    while(m.find()){ 
     System.out.println(m.start()+" : "+m.group(2)); 
     if(m.group(2).toString().equals("a")){ 
      str.replace(1, 1, "0"); 
     }else if(m.group(2).toString().equals("b")){ 
      str.replace(1, 1, "1"); 
     } 
    } 
    System.out.println(str); 
+0

Спасибо @Vinod за ответ, но я хочу это выражение регулярного выражения или код oneline для размещения в xml-файле. –

0

это похоже на работу:

str.replace(/^a/, "0").replace(/^b/, "1"); 
Смежные вопросы