2014-08-28 12 views
1

我已经写了一个小程序读新线为两个字符

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

输出为什么你不能改变字符串? – ModDL 2014-08-28 17:48:05

+0

@ModDL:我们不能更改字符串,因为它是由其他人给出的... – Abhinav 2014-08-28 17:52:13

回答

0

We can't change the string to add additional escape character.

我想这是不可能的,因为\n在字符串中使用时具有特殊意义。 逃生像这样\\n 双反斜杠反斜杠这要给你们长度为2

String str = "\\n"; 
System.out.println(str.length()); 

,或者尝试使用Apache的百科全书琅的

StringEscapeUtils#escapeJava() 
+1

OP的最后一句是*注:我们不能改变字符串来添加额外的转义字符。* – 2014-08-28 17:45:13

+0

感谢指出编辑@ElliottFrisch – SparkOn 2014-08-28 18:24:53

0

据我所知,你不能。问题是“\ n”是一个字符。单个反斜杠是一个逃跑。一旦你走过去的线

String s = "\n"; 

旨意包含一个新行字符,并没有什么,你可以做些什么

char ch = '\n'; // <-- not two characters. it's one. 
0

就这么简单。 你很明显可以创建一个新的String,并用“\ n”替换所有换行符,但我不认为这就是你想要的。

-1

只需使用另一个字符\盈方的\ n转换成\ n(新行)到\ n两个字符

+0

OP的最后一句话是*注:我们不能改变字符串来添加额外的转义字符。* – 2014-08-28 17:45:50

1

可以使用StringEscapeUtils实用类从commons-lang

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,那么你可以写你自己的方法去做。您可以浏览上面的类的代码,以查看如何转义字符串以解释不同特殊字符的示例。

+0

我不想使用任何额外的库。我们可以不用额外的库吗? – Abhinav 2014-08-28 17:47:38

+0

@Abhinav在这种情况下,你可以编写自己的方法...你可以看看上面的类的方法。它基本上解析字符串中的每个字符并相应地转义它。 – manouti 2014-08-28 17:58:59

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); 

这将适用于您添加到枚举中的任何特殊字符。

*注意的replaceAll()会消耗额外的反斜杠...如果你简单地调用System.out.println(SpecialCharacter.NEWLINE.getCharAsString());您将收到的\\n

+0

新行只是一个例子,同样适用于其他人也喜欢'\ r' – Abhinav 2014-08-28 17:51:17