2016-09-01 3 views
1

Это может звучать основной вопрос для вас. Но я застрял здесь. Я хочу заменить все двойные кавычки строки эквивалентным значением Unicode (" with \u0022).Double Quote escape Java

В C# это возможно. Но не знаю, как это сделать на Java.

C# - C# Working snippet

Java - Java Non working snippet

Примечание: В Java можно использовать \\u0022. Но в этом случае он избегает \ не двойной кавычки.

+2

http://stackoverflow.com/questions/4012918/problem-parsing-unicode-escape-in-a-java-6-string-literal Вот отличное объяснение –

+0

Возможно, мне что-то не хватает, но фрагмент C# опубликовано, похоже, заменяет персонажа точно таким же характером, но выражается по-другому? Символ (unicode, ascii) '' 'is' \ u0022'. – msandiford

+0

@msandiford, любой способ сделать то же самое в java? –

ответ

3

Как объяснен в the other question:

Проблема заключается в том, что замена Unicode d один очень ранний сбор. Выделения Unicode не просто верны в строках и символьных литералах (как и другие escape-последовательности, такие как \ t) - они действительны в любом месте кода. - Джон Скит

Так "\u0022" фактически эквивалентно """, что синтаксически неправильно в Java.

Это будет работать:

System.out.println(xyz.replaceAll("\"", ""+'\u0022')); 

И если вы только заменить символы:

System.out.println(xyz.replace('\"', '\u0022')); 

Но \u0022 это просто еще одна форма " характера. Если вы после общего решения, большинство персонажей не даст вам эту проблему в первую очередь, потому что они не возились со строковыми литералами, например ".

1

Здесь я пойти:

public static void main(String args[]){ 
     String yourJsonString = "Test\"TEST"; 
     yourJsonString = yourJsonString.replaceAll("\"", "\\\\u0022"); 
     System.err.println(yourJsonString); 
} 

Напечатает Test\u0022TEST

+0

Я хочу, чтобы результат был как Test Test. Точно так же, как в C#. –

1

Попробуйте это:

import java.util.*; import java.lang.*; 

class Rextester { 
    public static void main(String args[]) 
    { 
     System.out.println("Hello, World!"); 
     String xyz = "Hello \"World"; 
     System.out.println(xyz.replaceAll("\"", Character.toString((char)0x0022))); 
    } } 
2

Мы не можем представлять одну и ту же строку с единственным escape-кодом Unicode. «»»такой же, как„\ u0022“в Java, вы можете сделать это таким образом

public static void main(String args[]) 
{ 
    System.out.println("Hello, World!"); 
    String xyz = "Hello \"World"; 
    System.out.println(xyz.replaceAll("\"", "\u005c\u0022")); 
} 
1

Вы также можете сделать это, как это -

String s = "Hello \"world";  
System.out.println(s.replace('\"', (char) (0x22))); 

Важно представлять ценность Чара как шестнадцатеричное значение, добавив перед ним 0x.

0

Один из способов сделать это:

public class MainTester { 

    public static void main(String args[]) 
    { 
     System.out.println("Hello, World!"); 
     String xyz = "Hello \"World"; 
     System.out.println(xyz.replaceAll("\"", "\u005c\u0022")); 
    } 
} 

Выход:

Hello "World

1

Нет в тексте " источника Java и \u0022 не только то же самое, что они идентичный, так как при чтении \u0022 заменяется соответствующим символом ".

Вы могли бы написать:

public \u0063lass C { 

Если вы хотите написать JSON текст с тем же и-экранирования:

s = s.replace("\"", "\\u0022"); 

Однако это вполне может быть, что и некоторые читатель JSON может признать, что как ". Таким образом, возможно:

s = s.replace("\"", "\\\""); 

может быть более успешным.