Помогите с кодом Java
Я написал метод который выводит текст из пастебина, но он выводит мне его
в скобках, как мне сделать, чтобы было без скобок
private static void getPastebin(){
InputStream in = null;
try {
in = (new URL("тут ссылка на пастебин raw")).openStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader r = new BufferedReader(new InputStreamReader(in));
try {
while ((line = r.readLine()) != null)
check.add(line);
System.out.println(check);
} catch (IOException e) {
e.printStackTrace();
}
}
Ответы (3 шт):
- Вы можете использовать метод
substring(int beginIndex, int endIndex)для удаления первого и последнего символа строки:
String str = "[update123]";
System.out.println(str.substring(1, str.length()-1));
- Или же Вы можете использовать
replaceAll(String regex, String replacement)для удаления всех[и]:
String str = "[update123]";
System.out.println(str.replaceAll("\\[", "").replaceAll("\\]", ""));
Вот пример вашего кода с использованием способа №1
private static void getPastebin() {
InputStream in = null;
try {
in = (new URL("тут ссылка на пастебин raw")).openStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader r = new BufferedReader(new InputStreamReader(in));
try {
while ((line = r.readLine()) != null)
check.add(line);
System.out.println(check.substring(1, check.length()-1));
} catch (IOException e) {
e.printStackTrace();
}
}
Не совсем понятно, что относится к выводу программы, указанному в скриншоте, и какой текст был прочитан.
Поскольку выводится некая коллекция/список check после чтения строки, то будут выводиться скобки: [update123] значит, что была прочитана единственная строка.
Можно печатать строки либо в процессе чтения:
while ((line = r.readLine()) != null) {
check.add(line);
System.out.println(line);
}
либо выводить коллекцию построчно:
check.forEach(System.out::println);
На самом деле в вашем коде есть много проблем, но то, что вы спрашиваете проблемой не является) Все, что вы делаете, легко упрощается до такого вида:
private static void getPastebin() throws IOException {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("тут ссылка на пастебин raw").openStream()))) {
List<String> check = reader.lines().collect(Collectors.toList());
System.out.println(check);
}
}
Какие проблемы решаются в данном случае? Объясняю:
- все стримы, кроме тех, которые открывает сама система (например, system.in), необходимо закрывать, в противном случае вы получите большие проблемы, ведь это исчерпаемый ресурс и после того, как он будет исчерпан, ваша приложение неизбежно упадет. в приведенном мной случае это решается с помощью конструкции try-with-resources, информацию о которой вы найдете на просторах интернета без особых проблем
- принцип кiss никто не отменял, делайте все проще. ведь читаемость кода превыше всего
- бессмысленные catch, перехватывающие исключения и ничего не делающие, - плохая практика. какой в этом смысл? ровно также как нет смысла в вызове printStackTrace. в таком случае лучше просто пробросить исключение, легче будет дебажить.
- с именованием переменных одной буквой, кроме иитератора в виде "i", необходимо срочно завязывать. Ридер, именованный "r", вызовет подергивание глаза любого адекватного разработчика, ибо это приводит к тому, что ваш код становится нечитаемым.
И последнее... То, что вы считаете проблемой и таковой не является. Вы видите квадратные скобки потому, что при вызове System.out.println вы передаете коллекцию, а ее переопределенный метод toString() добавляет данные скобки. Почему это не является проблемой? Потому, что вы сейчас пытаетесь рассматривать коллекцию как единый String, а не множество String, как это есть на самом деле. Тут вам нужно определиться с тем, что вы хотите получить в итоге. Если это множество элементов, коим и является коллекция, то любые действия с ними будут производится в цикле поочередно для каждого элемента. Если идти таким путем, то для наглядности измените строку кода System.out.println(check); на check.forEach(System.out::println); Если вы хотите получить единую строку , то нужно результат складывать не в коллекцию, а сразу в переменную типа String. для этого измените строку кода List check = reader.lines().collect(Collectors.toList()); на String check = reader.lines().collect(Collectors.joining(" "));