我定义字符串作为获取定义字符串的实际长度在Java中
String s = "\\";
int length = s.length(); // returns 1
System.out.println(s); // prints only one "\"
我怎样才能得到它的大小等于2
?
UPD:问题不在于获取准确的2大小字符串。我需要得到我定义字符串的源字符数。
我定义字符串作为获取定义字符串的实际长度在Java中
String s = "\\";
int length = s.length(); // returns 1
System.out.println(s); // prints only one "\"
我怎样才能得到它的大小等于2
?
UPD:问题不在于获取准确的2大小字符串。我需要得到我定义字符串的源字符数。
使用DrJava的CharConverter。您可以为您的项目改编source code。它有一种方法可以将字符串中的所有转义字符转换回真正的Java输入。
String str1 = "\\";
String str2 = CharConverter.escapeString(str1);
System.out.println(str2.length()); // prints 2
String s = "\\";
只包含字符\
,而且因为它是一个特殊的一个,它必须与\
字符转义。
为了获得2大小的字符串,就可以逃脱两个反斜杠,像这样:
String s = "\\\\";
这一个不具有4
大小,但2
,因为有字符(明显,就像反斜杠一样),它们不是由编辑器中的单个可视元素表示的。
还有一些字符在打印时可以完全不可见(如Mongolian vowel separator),但是在源中(以其Unicode码)以不同方式表示。例如,蒙古元音分离器可以表示为:
String mongolianVowelSeparator = "\u180"; <-- one character only, invisible when printed
所以在这里我们有一个字符只(在U+180E
Unicode字符),但是我们使用的五种编辑的字符来代表它。
但是,在这种情况下,我需要将'4'作为答案 – SeniorJD
不,您应该了解某些字符在代码中表示为一系列字符。 –
@SeniorJD - 不,你不会..'\\'在java中有特殊含义。它被认为是*转义字符* – TheLostMind
见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值。
如上所述,“\”是转义字符,不加起来字符串的总长度。但是,如果您坚持将转义字符添加到总长度中,请尝试下面的这段代码。
对于每一个“\”,在你的字符串加一总长度。
String s = "\\";
int length = s.length();
for(int i = 0; i < s.length; i++)
if(s.charAt(i) == '\')
length++;
您是否尝试打印字符串..只是为了确保您的理解是正确的? – TheLostMind
@SeniorJD请听几个人告诉你:1 **是**你定义的字符串的长度。 –
可能值得说明为什么你需要知道长度是两个而不是一个 - 你的程序是否需要特别知道字符串是否被转义? – Fallso