Как я могу изменить строку дважды (основываясь на предыдущих изменениях) в Java?(код внутри) - PullRequest
1 голос
/ 27 сентября 2011
Например,

, скажем, у меня есть строка с именем names и я хочу .toUpperCase, а затем использовать функцию .replaceAll перед ее печатью.

Проблема, с которой я сталкиваюсь, заключается в том, что одновременно применяется только один шаг, а две функции обрабатываются отдельно.

    System.out.format(names[i].toUpperCase());
        System.out.format(names[i].replaceAll("SMITH", "<>JENKINS<>"));
        System.out.println(names[i]);

Заранее спасибо!

Ответы [ 7 ]

3 голосов
/ 27 сентября 2011

.toUpperCase() возвращает String. Вам нужно что-то вроде:

names[i].toUpperCase().replaceAll("SMITH", "<>JENKINS<>");

или

names[i] = names[i].toUpperCase();
names[i].replaceAll("SMITH", "<>JENKINS<>")
1 голос
/ 27 сентября 2011

String s в Java неизменны, они не меняются сами. Используемые вами методы возвращают новую измененную строку:

names[i] = names[i].toUpperCase();
System.out.format(names[i]);
names[i] = names[i]..replaceAll("SMITH", "<>JENKINS<>");
System.out.format(names[i]);

делает то, что ожидал ваш код.

1 голос
/ 27 сентября 2011

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

String changed = names[i].toUpperCase().replaceAll("SMITH", "<>JENKINS<>");
System.out.format(changed);

Извлечена переменная changed, чтобы сделать код более читабельным.

1 голос
/ 27 сентября 2011

Поскольку строки являются неизменяемыми в Java, ни одна из этих функций не работает на месте.Они не меняются names[i].Таким образом, вы должны назначить их временной переменной (или names[i]).Сделай что-нибудь подобное.

    String tmp = names[i].toUpperCase();
    System.out.format(tmp);
    tmp = tmp.replaceAll("SMITH", "<>JENKINS<>")
    System.out.format(tmp);
    System.out.println(tmp);
0 голосов
/ 27 сентября 2011
System.out.println(names[i].toUpperCase().replaceAll("SMITH", "<>JENKINS<>"));
0 голосов
/ 27 сентября 2011

Извлечь переменную?

    String str = names[i].toUpperCase().replaceAll("SMITH", "<>JENKINS<>");
    System.out.println(str);
0 голосов
/ 27 сентября 2011
names[i].replaceAll("SMITH", "<>JENKINS<>")

этот код возвращает только замененную строку. вам нужно установить его в переменную;

string str = names[i].replaceAll("SMITH", "<>JENKINS<>");

или заменить текущую ссылку;

names[i]= names[i].replaceAll("SMITH", "<>JENKINS<>");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...