2015-12-21 71 views
5

我定义字符串作为获取定义字符串的实际长度在Java中

String s = "\\"; 
int length = s.length(); // returns 1 
System.out.println(s); // prints only one "\" 

我怎样才能得到它的大小等于2

UPD:问题不在于获取准确的2大小字符串。我需要得到我定义字符串的源字符数。

+1

您是否尝试打印字符串..只是为了确保您的理解是正确的? – TheLostMind

+0

@SeniorJD请听几个人告诉你:1 **是**你定义的字符串的长度。 –

+0

可能值得说明为什么你需要知道长度是两个而不是一个 - 你的程序是否需要特别知道字符串是否被转义? – Fallso

回答

2

使用DrJava的CharConverter。您可以为您的项目改编source code。它有一种方法可以将字符串中的所有转义字符转换回真正的Java输入。

String str1 = "\\"; 
String str2 = CharConverter.escapeString(str1); 
System.out.println(str2.length()); // prints 2 
10

String s = "\\";只包含字符\,而且因为它是一个特殊的一个,它必须与\字符转义。

为了获得2大小的字符串,就可以逃脱两个反斜杠,像这样:

String s = "\\\\"; 

这一个不具有4大小,但2,因为有字符(明显,就像反斜杠一样),它们不是由编辑器中的单个可视元素表示的。

还有一些字符在打印时可以完全不可见(如Mongolian vowel separator),但是在源中(以其Unicode码)以不同方式表示。例如,蒙古元音分离器可以表示为:

String mongolianVowelSeparator = "\u180"; <-- one character only, invisible when printed 

所以在这里我们有一个字符只(在U+180E Unicode字符),但是我们使用的五种编辑的字符来代表它。

+0

但是,在这种情况下,我需要将'4'作为答案 – SeniorJD

+0

不,您应该了解某些字符在代码中表示为一系列字符。 –

+0

@SeniorJD - 不,你不会..'\\'在java中有特殊含义。它被认为是*转义字符* – TheLostMind

2

JLS - 3.10.6. Escape Sequences for Character and String Literals:在字符文字

的字符和字符串的转义序列允许对一些非图形字符的表示,以及单引号,双引号和反斜杠字符(§3.10.4)和字符串文字(§3.10.5)。

...

\ \ /* \u005c: backslash \ */

字符\Unicode Escapes用于:

除了由语法隐含,对于每个原始输入字符的处理即是反斜杠\,输入处理必须考虑有多少其他连续前面有10个字符,将其与非\字符或输入流的起始位置分开。如果这个数字是偶数,那么\有资格开始Unicode转义;如果数字是奇数,那么\不符合开始Unicode转义的条件。

值得一提的是,你的字符串可以写成:

\u005c 

由于005c\Unicode值

-2

如上所述,“\”是转义字符,不加起来字符串的总长度。但是,如果您坚持将转义字符添加到总长度中,请尝试下面的这段代码。

对于每一个“\”,在你的字符串加一总长度。

String s = "\\"; 
int length = s.length(); 

for(int i = 0; i < s.length; i++) 
    if(s.charAt(i) == '\') 
     length++; 
+0

它对'String s =“\ 123”'怎么样? – SeniorJD

+0

我建议你有时候会使用你的逻辑。无论如何,只需更改一下代码: for(int i = 1; i toliii

+0

如果String是'“123 \ 123”'会怎么样? – SeniorJD