我写了一个小程序
class Test {
public static void main(String[] args) {
String s = "\n";
System.out.println(s.length());
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
}
}
该程序将长度设为1
,并将\n
视为单个换行符。
我的要求是将\n
视为普通字符串,使用2
个字符(第一个字符\
和第二个字符n
),可以做些什么来实现它?
注意:1)我们无法更改字符串以添加其他转义字符。 2)我们不想使用任何其他第三方库
答案 0 :(得分:1)
您可以使用commons-lang
中的StringEscapeUtils
实用程序类。
String s = "\n";
s = StringEscapeUtils.escapeJava(s);
System.out.println(s.length());
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
输出:
2
\
n
如果你绝对不能使用commons-lang
这样的库,那么你可以编写自己的方法来实现它。您可以浏览上述类的代码,以查看如何转义字符串以考虑不同特殊字符的示例。
答案 1 :(得分:0)
We can't change the string to add additional escape character.
我想这是不可能的,因为\n
在String中使用时具有特殊含义。
像这样\\n
使用双反斜杠来逃避反斜杠
这将给你长度为2
String str = "\\n";
System.out.println(str.length());
或尝试使用apache commons-lang&#39>
StringEscapeUtils#escapeJava()
答案 2 :(得分:0)
据我所知,你不能。问题在于&#34; \ n&#34;是一个角色。单反斜杠是一种逃避。
char ch = '\n'; // <-- not two characters. it's one.
答案 3 :(得分:0)
这很简单:
一旦你越过界限
String s = "\n";
将包含一个新的行字符,你无能为力。 你可以显然创建一个新的字符串并用&#34; \ n&#34;替换所有新行字符,但我不认为这是你想要的。
答案 4 :(得分:0)
您可以搜索字符串并将/ n的所有字符版本替换为// n。
String s = convertNewLineChars("\n");
public String convertNewLineChars(String s)
{
//for each character in string, replace '\n' with \\n
}
修改强>
对所有可能的特殊字符使用枚举
public enum SpecialCharacter
{
NEWLINE('\n', "\\\\n"), //see note at the bottom of the answer for why
RETURN('\r', "\\\\r"); //there are four backslashes.
private char character;
private String charAsString;
private SpecialCharacter(char character, String charAsString)
{
this.character = character;
this.charAsString = charAsString;
}
public char getCharacter()
{
return this.character;
}
public String getCharAsString()
{
return this.charAsString;
}
public static SpecialCharacter[] getAllCharacters()
{
return new SpecialCharacter[] {NEWLINE, RETURN}; //etc...
}
}
创建一个用于删除这些字符的静态方法
public static String removeSpecialCharacters(String s)
{
String returnString = s;
for (SpecialCharacter character : SpecialCharacter.getAllCharacters())
{
returnString = returnString.replaceAll("["+character.getCharacter()+"]", character.getCharAsString());
}
return returnString;
}
然后你可以这样说:
String s = removeSpecialCharacters("\nfdafhoean\noasd\r\rjfoi");
System.out.println(s);
这适用于您添加到枚举的任何SpecialCharacter。
*请注意,replaceAll()将使用额外的反斜杠...如果您只是致电System.out.println(SpecialCharacter.NEWLINE.getCharAsString());
,您将收到\\n
的输出
答案 5 :(得分:-1)
只需使用\ n前面的另一个\字符将\ n(新行)转换为\ n两个字符