2016-04-05 5 views
0

Я ищу, чтобы изменить значения строки, если определенные позиции в строке являются определенными значениями, например, у меня есть почтовый индекс L65 OBH и мне нужно сделать следующее:В Groovy Language Как заменить символ в строке на основе значения и позиции в строке

(1)

Если первое значение в первой части строки (разделенные пробелами) = L оно должно быть изменено на T. Это позволило бы дать :

Т65 OBH

(2)

Тогда, если второе значение в первой секции колонны (разделены пробелами) = 6 оно должно быть изменено до 7. Это позволит затем дать:

T75 OBH

(3)

Тогда, если 1-е значение во второй секции колонны (разделены пробелами) = о оно должно быть изменено на 2. Это будет затем дать:

T75 2BH

(4)

Тогда, если третье значение во второй секции колонны (разделены пробелами) = Н оно должно быть изменено на P. Это будет затем дать:

Т75 2BP

Я предполагаю, что мне нужно использовать replaceall и ряд операторов IF, но я изо всех сил пытаюсь это понять, особенно, как разделить две разные части почтового индекса, рассматривая их как отдельные возможности ... может кто-нибудь помочь пожалуйста,

ответ

1

Я бы написать вспомогательный метод для правил замены:

def postcode = 'L65 0BH' 

def (first, second) = postcode.split(/\s+/) 

def replaceIf(String token, int position, String match, String replacement) { 
    (0..<token.length()).collect { index -> 
     if(index == position && token[index] == match) { 
      replacement 
     } 
     else { 
      token[index] 
     } 
    }.join() 
} 

first = replaceIf(first, 0, 'L', 'T') 
first = replaceIf(first, 1, '6', '7') 
second = replaceIf(second, 0, '0', '2') 
second = replaceIf(second, 2, 'H', 'P') 

assert "$first $second" == 'T75 2BP' 
+0

Привет, спасибо за быстрый обратной связи tim_yates это выглядит то, что я хочу использовать, однако он дает мне 2bp в ответ? – csman

+0

Вам нужно присоединиться к двум вместе «$ first $ second», как я покажу в нижней части своего кода –

+0

Получил это ... большое спасибо :-) – csman

0
def strVal= "L65 OBH" 
strVal.replaceFirst(/^L/, "T") 

def strVal1= "L65 OBH" 
strVal1.replaceFirst(/^6/, "7") 

и т.д. используя тот же replaceFirst() метод

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