powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Разбивка на слова
25 сообщений из 42, страница 1 из 2
Разбивка на слова
    #39654473
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть текст:
Код: java
1.
String text = "\"Сумма, руб.\", \"Сумма (без НДС), руб\", \"Кол-во\"";



Как мне разбить текст на слова по "," чтобы получился массив с:
Код: java
1.
2.
3.
"Сумма, руб.",
"Сумма (без НДС), руб",
"Кол-во"



???

Я так понимаю нужна регулярка.

Обязательно подниму стакан за того кто поможет =)
Спасибо!
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654483
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

split
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654488
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя, нда... )
Немного другое я ожидал услышать
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654489
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понимаю что чрез text.split().
Но я делю предложение по фразам заключенным в кавычки, через запятую (т.е. разделитель запятая).
Но запятая также может содержаться и в самой фразе, а мне не нужно это учитывать.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654507
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда split по
Код: plaintext
\", \"
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654509
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня - устойчивое дежа-вю 21076195
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654518
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще на json похоже. Точнее на его кусок.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654545
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это обычный comma-separated-values. +Текстовые литералы заключены в quotes.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654713
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronovMV,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
import java.util.regex.Pattern;
import java.util.List;
import java.util.stream.Collectors;

public class Split {
    private static final Pattern QUOTE_WITH_COMMA = Pattern.compile("\", \"");
    public static void main(String args[]) {
        String text = "\"Сумма, руб.\", \"Сумма (без НДС), руб\", \"Кол-во\"";
        List<String> splitedString = QUOTE_WITH_COMMA.splitAsStream(text.replaceFirst("^\"", "").replaceFirst("\"$", ""))
            .collect(Collectors.toList());
        System.out.println("Splitted string = " + splitedString);
        // Splitted string = [Сумма, руб., Сумма (без НДС), руб, Кол-во]
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654819
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше через json mapper

на выходе получите: String[]

Код: java
1.
2.
ObjectMapper mapper = new ObjectMapper();
String[] strings = mapper.readValue("[" + "\"Сумма, руб.\", \"Сумма (без НДС), руб\", \"Кол-во\"" + "]", String[].class);
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654913
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если эта строка в тексте кода, то на кой ляд стока городить?

String text = "\"Сумма, руб.\"@ \"Сумма (без НДС), руб\"@ \"Кол-во\"";
и сплитом по @.
а так - странно использовать в качестве разделителя тот же символ, что и встречается в тексте.

2Герой дня
оно конечно 2 строки вроде красиво, но это объект, но во что разворачивается его выполнение?
...
Рейтинг: 0 / 0
Разбивка на слова
    #39654934
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще с помощью ANTLR.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655298
Фотография Герой дня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли эта строка в тексте кода, то на кой ляд стока городить?

String text = "\"Сумма, руб.\"@ \"Сумма (без НДС), руб\"@ \"Кол-во\"";
и сплитом по @.
а так - странно использовать в качестве разделителя тот же символ, что и встречается в тексте.

2Герой дня
оно конечно 2 строки вроде красиво, но это объект, но во что разворачивается его выполнение?

в миллисекунду или меньше
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655311
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Герой дня,
тогда сплит будет измерчться в микросекундах
оно, конешно, само по себе не критично, но когда таких кусков море - уже требуется рефакторить...
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655346
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Ну да, бывает такое, что код необходимо допиливать...
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655350
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяесли эта строка в тексте кода, то на кой ляд стока городить?

String text = "\"Сумма, руб.\"@ \"Сумма (без НДС), руб\"@ \"Кол-во\"";
и сплитом по @.
а так - странно использовать в качестве разделителя тот же символ, что и встречается в тексте.

2Герой дня
оно конечно 2 строки вроде красиво, но это объект, но во что разворачивается его выполнение?

Это не строка в тексте, точнее это инструмент который должен принимать код в стандарте SQL92 и понятен всем. Если там будут всякие мифические символы типа @ это ИМХО говно.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655353
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HettВообще на json похоже. Точнее на его кусок.
Неа, это не JSON, простой SQL с комментами в которых заключаются настройки для вывода результата
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655355
AndronovMV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin KolesnikovAndronovMV,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
import java.util.regex.Pattern;
import java.util.List;
import java.util.stream.Collectors;

public class Split {
    private static final Pattern QUOTE_WITH_COMMA = Pattern.compile("\", \"");
    public static void main(String args[]) {
        String text = "\"Сумма, руб.\", \"Сумма (без НДС), руб\", \"Кол-во\"";
        List<String> splitedString = QUOTE_WITH_COMMA.splitAsStream(text.replaceFirst("^\"", "").replaceFirst("\"$", ""))
            .collect(Collectors.toList());
        System.out.println("Splitted string = " + splitedString);
        // Splitted string = [Сумма, руб., Сумма (без НДС), руб, Кол-во]
    }
}



С уважением, Валентин

Спасибо! )
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655551
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ради хохмы
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Xxx4 {

    private static final Pattern QUOTE_WITH_COMMA = Pattern.compile("\", \"");

    public static void main(String args[]) {
        long s = System.nanoTime();
        String text = "\"Сумма, руб.\", \"Сумма (без НДС), руб\", \"Кол-во\"";
        List<String> splitedString = QUOTE_WITH_COMMA.splitAsStream(text.replaceFirst("^\"", "").replaceFirst("\"$", ""))
                .collect(Collectors.toList());
       System.out.println(System.nanoTime() - s);
       System.out.println("Splitted string = " + splitedString);
        
    }

}


время выполнения 141 101 443

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Xxx5 {

    private static final Pattern QUOTE_WITH_COMMA = Pattern.compile("\", \"");

    public static void main(String args[]) {
        long s = System.nanoTime();
        String text = "\"Сумма, руб.\", \"Сумма (без НДС), руб\", \"Кол-во\"";
        String[] splitedString = text.replace("\", ", "\"@").split("@");
        System.out.println(System.nanoTime() - s);
        System.out.println("Splitted string = " + splitedString[0] + "   " + splitedString[2] + "   " + splitedString[2]);
        
    }

}


время выполнения 1 904 517

каждый волен выбирать своё
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655638
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Так не меряют. Нужен JMH.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655646
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и разбор косяков микротестов.
Задлянафига, если профилирование ещё не сказало своего веского слова?
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655663
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь нечего профилировать. Я так думаю.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655667
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТак не меряют. Нужен JMH.
понятно, что надо прогнать множество, циклов и пр.пр.
но это когда очень близкие цифры.
но тут разница приличная, и она заключается просто в количестве выполненного кода.
и я не уверен, что оптимизатор примет участие, ведь такой код в рантайме не будет использоваться очень многократно.
но если есть желание - я с удовольствием посмотрю на более качественные тесты сравнения.
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655786
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import java.util.ArrayList;
import java.util.List;

public class Split {
    public static void main(String args[]) {
        long s = System.nanoTime();
        String text = "\"Сумма, руб.\", \"Сумма (без НДС), руб\", \"Кол-во\"";
        List<String> result = new ArrayList<>();
        int savedIndex = 1;
        for (int index = 0; index < text.length() - 4; index += 1) {
            if (text.substring(index, index + 4).equals("\", \"")) {
                result.add(text.substring(savedIndex, index));
                savedIndex = index + 4;
                index += 4;
            }
        }
        result.add(text.substring(savedIndex, text.length() - 1));
        System.out.println(System.nanoTime() - s);
        System.out.println("Split string = " + result);
    }
}



Вариант с циклом.

С уважением, Валентин
...
Рейтинг: 0 / 0
Разбивка на слова
    #39655795
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov, substring.... жесть какая
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Разбивка на слова
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]