Java: сопоставление повторяющегося символа в начале новой строки и замена на такое же количество альтернатив - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть простой текстовый файл с количеством строк (символ новой строки \n). Некоторые из этих строк начинаются с различного числа последовательных повторяющихся пробельных символов \\s. Я хочу заменить каждый \\s на  . Файл примера:

This is a line with no white space at the beginning
  This is a line with 2 whitespace characters at the beginning
    This is a line with 4 whitespace at the beginning

преобразуется в:

This is a line with no white space at the beginning
  This is a line with two whitespace characters at the beginning
    This is a line with 4 whitespace at the beginning

Есть предложения?

Спасибо

Ответы [ 3 ]

5 голосов
/ 08 ноября 2010
text = text.replaceAll("(?m)(?:^|\\G) ", " ");

^ в режиме MULTILINE соответствует началу строки.
\G соответствует точке, где закончилось предыдущее совпадение (или началу ввода, если предыдущего совпадения не было).

Если вы обрабатываете одну строку за раз, вы можете сократить регулярное выражение до "\\G ".

1 голос
/ 08 ноября 2010
String line;
StringBuilder buf = new StringBuilder();
int i;
for (i=0; i<line.length(); i++)
{
    if (line.charAt(i) == ' ')
        buf.append("&nbsp;");
    else
        break;
}
if (i < line.length()) buf.append(line.substr(i));
line = buf.toString();
1 голос
/ 08 ноября 2010

// попробуйте это:

BufferedReader reader = new BufferedReader(new FileReader("filename"));
String line;
StringBuffer buffer;
while ((line = reader.readLine()) != null) {
  buffer = new StringBuffer();
  int index = line.indexOf(line.trim());
  for (int i = 0; i < index; i++) {
    buffer.append("&nbsp;");
  }

  buffer.append(line.subString(index) + "\n"); 
  System.out.println(buffer.toString()); 
} 
reader.close();

// ещё немного кода очистки здесь

...