将新行读为两个字符

时间:2014-08-28 17:39:39

标签: java string escaping newline string-length

我写了一个小程序

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)我们不想使用任何其他第三方库

6 个答案:

答案 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两个字符