¿Cómo usar una expresion регулярный para reemplazar espacio en blanco del inicio de una cadena por #?

Внесите todo ООН сердечный saludo, y gracias de ante mano, estoy intentando realizar ООН replaceAll, para remplazar todos los espacios en blanco al inicio de una cadena de string por #, соло pero la expresion я cambia el primer espacio de la cadena:

"detalleLinea": ""             COMPROBANTE DE VENTA CON PIN                          "

Uso el código

row.setDetalleLinea(rs[2].replace("\"", "").replaceAll("^\\s+","#"));

y obtengo este resultado:

"detalleLinea": "#COMPROBANTE DE VENTA CON PIN                          ",
0
задан 19.12.2019, 21:40
2 ответа

Поскольку ты только хочешь заменить начальное место, я считаю, что тогда использовать регулярное выражение вместе с методами String.replace*(), чтобы этого добиваться не выполнимо, так как эти методы применяют выражение регулировать изнурительно на всей цепи. Это означает, что, хотя ты сможешь находить какой-то regex, который предположительно помогал бы тебе, всегда будет какой-то случай, в котором он не удастся.

В пользу такого мотива я предлагаю тебе осуществлять метод утилиты, которая помогала бы тебе с этим.

    public static String replaceAllLeading(String str, char replacement) {
        int length = str.length();
        var strCharArr = str.toCharArray();
        int i = 0;
        while (i < length && Character.isWhitespace(strCharArr[i])) {
            strCharArr[i] = replacement;
            i++;
        }

        return String.copyValueOf(strCharArr);
    }

Потом может делать нечто похожее

var str = "             COMPROBANTE DE VENTA CON PIN                          ";
System.out.println(replaceAllLeading(str, '#'));

Полученные #############COMPROBANTE DE VENTA CON PIN

ГЛАЗ : Место в мишени конца не удаляется.

0
ответ дан 21.12.2019, 12:13
  • 1
    если действительно это - то, в чем я нуждаюсь, которое только remplace место в мишени начала цепи все, из-за #, только я remplaza первый характер, он старается использовать *, но получаю тот же результат – Víctor Eduardo Duque Rosales 19.12.2019, 21:36
  • 2
    @Ví ctorEduardoDuqueRosales я заношу в список, сейчас, если он делает то, в чем ты нуждаешься. – E. Betanzos 19.12.2019, 23:21

Ты мог бы делать это следующими формами, сначала самая элегантная с \s больше место и в Вашем месте заменяя двумя # или просто два непрерывных типа места, замененных двумя ##:

        String texto = "        COMPROBANTE DE VENTA CON PIN        ";
        texto = texto.replaceAll("\\s ", "##"); //Así se ve mas elegante 
      //texto = texto.replaceAll("  ", "##"); //dos espacios, mismo resultado que arriba
        System.out.println(texto);

С \s ты находишь символ места (он включает место, табулировать, новая страница, новую линию, между другими), из-за того же самого, когда два типа места будут объединенными, он заменяется одним #.

    texto.replaceAll("\\s ", "#");

, Но существует маленькая проблема, в предыдущем, так как этот заменит 2 типа места, которые найдут объединенными с одним #

, ВВЕДЕННЫЕ

"        COMPROBANTE DE VENTA CON PIN        "

ПОЛУЧЕННЫЕ

" ####COMPROBANTE ПРОДАЖИ С PIN#### "

, Ввод обладает 8 типами места в мишени уже будьте в начале как в конце той же самой, но только их является 4 в каждую сторону.

Из-за того же самого количество места, был тем же самым, когда цепь будет форматироваться, я существую, так как для каждого двух места я заменил со второй ##

 texto = texto.replaceAll("\\s ", "##"); 
 texto = texto.replaceAll("  ", "##");
годом

всем предыдущим:

, ВВЕДЕННЫЕ

"        COMPROBANTE DE VENTA CON PIN        "

ПОЛУЧЕННЫЕ

" ########COMPROBANTE ПРОДАЖИ С PIN######## "

Шрифт: регулярных Выражений

1
ответ дан 21.12.2019, 12:13