05 июн 2020 14:48 | |
Сообщения:1
|
программу которая удаляет все слова в тексте, начинающиеся с прописной буквы
|
05 июн 2020 15:45 | |
Сообщения:127
|
public class Main { public static void main(String[] args) { String outText = ""; String text = "Шла Саша по шоссе и сосала сушку"; String[] s = text.split(" "); for (String value : s) { String tmp = String.valueOf(value.charAt(0)); if (tmp == tmp.toUpperCase()) { outText += " " + value; } } System.out.println(outText); } } |
Изменен:05 июн 2020 12:51 |
05 июн 2020 18:29 | |
Сообщения:256
|
if (tmp == tmp.toUpperCase()) { Тут всегда false будет. |
05 июн 2020 18:57 | |
Сообщения:127
|
axwer:
if (tmp == tmp.toUpperCase()) { Тут всегда false будет. Чего то я не понял :)) Печатал пример с телефона, но проверял на рабочем компе на работе. Все работало. Я не совсем понимаю что происходит, на работе стоит Win7 и пример работает как надо, Сейчас же проверяю пример дома на win10 и пример не работает. Я так понял что проблема с кодировкой, если строку изменить на латиницу то пример снова работает... import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; public class MainTest { public static void main(String[] args) throws UnsupportedEncodingException { String outText = ""; String text = new String("Шла Саша по шоссе и сосала сушку".getBytes(), StandardCharsets.UTF_8); String[] s = text.split(" "); for (String value : s) { String tmp = String.valueOf(value.charAt(0)); if (tmp.equals(tmp.toUpperCase())) { outText += " " + value; } } System.out.println(outText); } } Да, дело действительно в кодировке. На Win10 данный пример в консоли Win работает нормально. В IDEA тоже нормально, но знаки вопроса вместо букв. |
Изменен:05 июн 2020 18:51 |
05 июн 2020 22:04 | |
Сообщения:256
|
В первом примере использовали == для сравнения, поэтому он не должен был работать. В следующем примере, уже equals, здесь уже всё нормально.
|
05 июн 2020 22:08 | |
Сообщения:127
|
axwer:
В первом примере использовали == для сравнения, поэтому он не должен был работать. В следующем примере, уже equals, здесь уже всё нормально.
Он тоже будет работать, дело не в этом, а в кодировке. |
Изменен:05 июн 2020 19:08 |
05 июн 2020 22:15 | |
Сообщения:114
|
Он работает просто по удачному стечению обстоятельств. toUpperCase реализован так, что если в строке менять нечего, то возвращает саму строку. Но сравнивать содержимое строк через == не правильно.
|
05 июн 2020 22:21 | |
Сообщения:127
|
Да, я согласен с тем, что не нужно так сравнивать строки, но проблема то все равно не в этом оказалась.
|
Изменен:05 июн 2020 19:23 |
05 июн 2020 22:34 | |
Сообщения:114
|
А как он не работал-то? Все слова с заглавной считал?
|
05 июн 2020 22:57 | |
Сообщения:127
|
Flashrunner:
А как он не работал-то? Все слова с заглавной считал?
У меня на Win10 первый пример кода в цикле все как true считал. Хотя на Win7 идеально работал. |
Изменен:05 июн 2020 20:30 |
06 июн 2020 07:57 | |
Сообщения:127
|
Пример с учетом всех замечаний:
import java.io.PrintStream; import java.nio.charset.StandardCharsets; public class MainTest { public static void main(String[] args) { PrintStream ps = new PrintStream(System.out, true, StandardCharsets.UTF_8); StringBuilder outText = new StringBuilder(); String text = new String("Шла Саша по шоссе и сосала сушку".getBytes(), StandardCharsets.UTF_8); String[] s = text.split(" "); for (String value : s) { String tmp = String.valueOf(value.charAt(0)); if (tmp.equals(tmp.toUpperCase())) { outText.append(" ").append(value); } } ps.println(outText); } } |
06 июн 2020 10:55 | |
Сообщения:114
|
Всё же проблема с кодировкой отношения к делу не имеет, она лично ваша. Нужно просто, чтобы кодировка исходника совпадала с той, с которой он читается компилятором (по умолчанию - системной).
|
06 июн 2020 11:31 | |
Сообщения:127
|
Flashrunner:
Всё же проблема с кодировкой отношения к делу не имеет, она лично ваша. Нужно просто, чтобы кодировка исходника совпадала с той, с которой он читается компилятором (по умолчанию - системной).
По у молчанию файл у меня в кодировке UTF-8. Я сейчас немного поэкспериментировал, компиляция без флагов и запуск без флагов на первом варианте примера не давала правильно рабочий код. Получилось только когда я при компиляции явно указываю кодировку и при запуске... javac -encoding utf8 MainTest.java Если я в консоли меняю кодовую страницу например chcp 65001, то что бы пример работал также нужно добавить опцию при запуску примера. java -Dfile.encoding=UTF-8 MainTest Но это касаемо только когда в строках есть русский текст, если все строки с английскими буквами, то и без флагов работает. |
Изменен:06 июн 2020 09:16 |
06 июн 2020 11:50 | |
Сообщения:114
|
Всё правильно, это потому что системная кодировка у вас не utf8, т.е отличается от кодировки файлов.
|
06 июн 2020 11:53 | |
Сообщения:127
|
Flashrunner:
Всё правильно, это потому что системная кодировка у вас не utf8, т.е отличается от кодировки файлов.
Я компилирую: javac -encoding utf8 MainTest.java Запускаю без опций и без указания кодовой страницы консоли: Работает правильно. Ставлю в консоли кодировку chcp 65001 Запускаю пример не работает... Ну или работает но не видно результат. Добавляю опцию запуска java -Dfile.encoding=UTF-8 MainTest - Работает правильно. Я неправильно что то понимаю? |
Изменен:06 июн 2020 09:18 |