Обрезка строки Java не имеет никакого эффекта

Обрезка строки Java не удаляет пробельные символы для меня.

String rank = (some method);
System.out.println("(" + rank + ")");

Выход (1 ), Обратите внимание на пространство справа от 1.

Я должен удалить завершающий пробел из строки rank но ни rank.trim() ни rank.replace(" ","") удаляет это.

Строка rank просто остается неизменным в любом случае.

Изменить: Полный код::

Document doc = Jsoup.connect("http://www.4icu.org/ca/").timeout(1000000).get();
Element table = doc.select("table").get(7);
Elements rows = table.select("tr");
for (Element row: rows) {
  String rank = row.select("span").first().text().trim();
  System.out.println("("+rank+")");
}

Почему я не могу удалить это место?

7 ответов

Решение

Исходный код этого сайта показывает специальный символ HTML  , Попробуйте найти или заменить следующее в вашей строке Java: \u00A0,

Это неразрывное пространство. Смотрите: у меня есть строка с "\u00a0", и мне нужно заменить ее на "" str_replace не удается

rank = rank.replaceAll("\u00A0", "");

должно сработать. Может быть, добавить двойной \\ вместо \,

Вы должны присвоить результат обрезки обратно String переменная. Иначе это не сработает, потому что строки в Java неизменны.

String orig = "    quick brown fox    ";
String trimmed = original.trim();

Символ является неразрывным пробелом и поэтому не удаляется trim() метод. Перебирайте символы и выводите значение int каждого из них, чтобы узнать, какой символ необходимо заменить пустой строкой, чтобы получить то, что вы хотите.

У меня была та же проблема, и я немного поработал над методом trim() java.
Вы можете использовать этот код для обрезки:

public static String trimAdvanced(String value) {

        Objects.requireNonNull(value);

        int strLength = value.length();
        int len = value.length();
        int st = 0;
        char[] val = value.toCharArray();

        if (strLength == 0) {
            return "";
        }

        while ((st < len) && (val[st] <= ' ') || (val[st] == '\u00A0')) {
            st++;
            if (st == strLength) {
                break;
            }
        }
        while ((st < len) && (val[len - 1] <= ' ') || (val[len - 1] == '\u00A0')) {
            len--;
            if (len == 0) {
                break;
            }
        }


        return (st > len) ? "" : ((st > 0) || (len < strLength)) ? value.substring(st, len) : value;
    }

Вы назначаете строку?

String rank = " blabla "; 
rank = rank.trim();

Не забудьте второе задание, иначе ваша урезанная строка никуда не денется.

Вы также можете найти этот материал в API: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html()

Как вы можете видеть, этот метод возвращает String, как и большинство методов, которые работают с String. Они возвращают измененную строку и оставляют исходную строку в такте.

Функция Trim возвращает новую копию строки, пропуская начальные и конечные пробелы.

rank = rank.trim();// This will remove and save rank without leading and trailing spaces

даст результат, который вы хотите.

Метод замены не будет работать, если вы передадите пустую строку для замены.

Поскольку строки в Java являются неизменными, то есть они не могут быть изменены. Вам нужно переназначить его на какую-нибудь временную строку. И затем, используя эту строку, вы можете преобразовать ее в int.

String temp=rank.trim()
int te= Integer.parseInt(temp)
Другие вопросы по тегам