Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting empty character literal error in java code that specified unicode literals [duplicate]

Why does this code

 public class Apostrophier
{
    public static String replace(String s)
    {
        return s.replace('\u0092','\u0027');
    }
}

give

'empty character literal'

when I try to compile ?

like image 308
Paul Taylor Avatar asked Jan 17 '14 17:01

Paul Taylor


2 Answers

The unicode code points in the source file are replaced by the actual character they represents. Since '\u0027' is for ' (apostrophe). So, your return statement is replaced to:

  return s.replace('\u0092',''');  

Note: \u0092 will also be replaced by control character.

So, the 2nd argument is an invalid character literal. You can rather use \' directly.

like image 116
Rohit Jain Avatar answered Nov 05 '22 12:11

Rohit Jain


Replacing the unicode sequences is a very early step of the compilation process. In particular, it happens before parsing literals. So when it's time to parse the literals, \u0027 has already been replaced with '. Therefore, after the comma, you have ''', which the compiler can't make sense of.

like image 5
Dawood ibn Kareem Avatar answered Nov 05 '22 10:11

Dawood ibn Kareem