2016-06-01 4 views
-1

У меня есть строка, какJava "||" Строка заменить "ИЛИ"

"возраст = 18 || имя = 'Mistic' || civilstatus = 'женился' || гендерном = '0'"

и мне нужно заменить "||" по "OR". Я попробовал следующий код.

System.out.println("age = 18 || name = 'Mistic' || civilstatus = 'married' || gender = '0'".replaceAll("||", "OR")); 

, но я получил

«ORaORgOReOR OR = ИЛИ OR1OR8OR ИЛИ | ИЛИ | ИЛИ ORnORaORmOReOR OR = ИЛИ OR'ORMORiORsORtORiORcOR'OR ИЛИ | ИЛИ | ИЛИ ORcORiORvORiORlORsORtORaORtORuORsOR ИЛИ = OR OR» ORmORaORrORrORiOReORdOR'OR ИЛИ | ИЛИ | ИЛИ ORgOReORnORdOReORrOR OR = ИЛИ OR'OR0OR'OR»

Что мне нужно, это

"возраст = 18 ИЛИ имя = 'Mistic' OR civilstatus = 'женился' или пол = '0'"

Как я могу добиться этого.

Редактировать Я прочитал вопрос и ответ this question и не simiar. Потому что этот вопрос касается замены строки, и мой вопрос заключается в получении незнакомого результата для моего кода.

+0

@ErwinBolwidt Этот вопрос не является дубликатом с моим вопросом. –

+0

Почему это не дубликат? У ОП этого вопроса была та же путаница, что и у вас, и ответ тот же. Вы также должны посмотреть на самый высокий голосовой ответ на свой вопрос. Ответ на дубликат объясняет, почему вы можете быть смущены между 'replaceAll' и' replace'. –

+0

Это потому, что 'replaceAll' принимает регулярное выражение, например' split'. Посмотрите на связанный вопрос. – Tunaki

ответ

5

| имеет особое значение в регулярном выражении. Вам нужно избежать этого.

public static void main(String[] args) { 
    String s = "age = 18 || name = 'Mistic' || civilstatus = 'married' || gender = '0' "; 
    System.out.println(s.replaceAll("\\|\\|", "OR")); 
} 

O/P:

age = 18 OR name = 'Mistic' OR civilstatus = 'married' OR gender = '0' 

PS: В качестве альтернативы, вы можете использовать Pattern.quote(), чтобы экранировать специальные символы.

String st = Pattern.quote("||"); 
System.out.println(s.replaceAll(st, "OR")); 
2

Вам необходимо избежать «||», так как они являются метасимволами в регулярных выражениях.

Использование:

System.out.println("age = 18 || name = 'Mistic' || civilstatus = 'married' || gender = '0'".replaceAll("\\|\\|", "OR")); 

Причина, почему вы получаете:

«ORaORgOReOR OR = OR OR1OR8OR ИЛИ | ИЛИ | ИЛИ ORnORaORmOReOR OR = ИЛИ OR'ORMORiORsORtORiORcOR'OR ИЛИ | ИЛИ | ИЛИ ORcORiORvORiORlORsORtORaORtORuORsOR OR = ИЛИ OR'ORmORaORrORrORiOReORdOR'OR ИЛИ | ИЛИ | ИЛИ ORgOReORnORdOReORrOR OR = ИЛИ OR'OR0OR'OR»

Это потому, что регулярное выражение "||" говорит «заменить пустую строку ИЛИ пустую строку ИЛИ пустую строку» на «ИЛИ». Другими словами, замените все пустые строки на «OR».

1

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

1

Вы можете использовать следующий код для замены всех '||' с «ИЛИ»

String str = "age = 18 || name = 'Mistic' || civilstatus = 'married' || gender = '0' "; 
System.out.println(str.replaceAll("\\|\\|", "OR")); 
10

Почему вы используете replaceAll когда вы не желая заменить регулярное выражение?

Попробуйте только с помощью обычного replace

System.out.println("age = 18 || name = 'Mistic' || civilstatus = 'married' 
    || gender = '0'".replace("||", "OR")); 

Выходной

возраст = 18 ИЛИ имя = 'MISTIC' ИЛИ ​​civilstatus = 'женился' OR гендерная = '0'

2

Использование Pattern.quote

System.out.println("age = 18 || name = 'Mistic' || civilstatus = 'married' || gender = '0'".replaceAll(Pattern.quote("||"), "OR")); 
2

вы можете использовать замену вместо replaceAll, попробуйте использовать следующий ..

System.out.println("age = 18 || name = 'Mistic' || civilstatus = 'married' || gender = '0' ".replace("||", "OR")); 
+0

Почему вы назначаете строку, а затем даже не используете ее? –

+0

о да, спасибо вам не нужно брать строку, я исправил .. –

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

  • Нет связанных вопросов^_^