Чтение новой строки в виде двух символов

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) Мы не можем изменить строку, чтобы добавить дополнительный escape-символ. 2) Мы не хотим использовать дополнительную стороннюю библиотеку

  • 0
    Почему вы не можете изменить строку?
  • 0
    @ModDL: Мы не можем изменить строку, как это было дано какой-то другой персоной ...
Теги:
string
escaping
newline
string-length

6 ответов

1

Вы можете использовать StringEscapeUtils утилиты 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
    Я не хочу использовать дополнительную библиотеку. Можно ли обойтись без дополнительных библиотек?
  • 0
    @Abhinav В этом случае вы можете написать свой собственный метод ... Вы можете посмотреть, как это делает вышеупомянутый класс. Он в основном анализирует каждый символ в строке и соответственно избегает его.
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
0

Это так просто:

Как только вы пройдете линию

String s = "\n";

s будет содержать один новый символ строки, и вы ничего не сможете с этим поделать. Очевидно, вы можете создать новую строку и заменить все новые строковые символы на "\n", но я не думаю, что вы хотели.

0

Насколько я знаю, вы не можете. Проблема в том, что "\n" - один символ. Единственная обратная косая черта - это побег.

char ch = '\n'; // <-- not two characters. it one. 
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

StringEscapeUtils#escapeJava()
  • 1
    Последнее предложение поста OP: ПРИМЕЧАНИЕ. Мы не можем изменить строку, чтобы добавить дополнительный escape-символ.
  • 0
    Спасибо за указание, что отредактировал @ElliottFrisch
-1

Просто используйте другой\символ infront\n для преобразования \n (новая строка) в \n два символа

  • 0
    Последнее предложение поста OP: ПРИМЕЧАНИЕ. Мы не можем изменить строку, чтобы добавить дополнительный escape-символ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню