#java #groovy
#java #groovy
Вопрос:
Моя строковая переменная содержит строку, каждая в отдельной строке. Как мне найти количество новых строк в нем, а затем каждое слово, разделенное ,
разделителем на определенной строке string? Содержимое переменной примерно такое, как показано ниже
null37,Abhishek,ARS,b,ABC,Development,2011-05-30 00:00:00.0,abhishek123@cjb.net
null38,Abhishek,SAS,c,ABC,Development,2011-05-30 00:00:00.0,abhishek123@cjb.net
null39,Abhishek,DGV,a,ABC,Production,2011-05-30 00:00:00.0,abhishek123@cjb.net
Отредактировано:
Я пробовал это
String xmlstr="""null37,Abhishek,ARS,b,ABC,Development,2011-05-30 00:00:00.0,abhishek123@cjb.net
null38,Abhishek,SAS,c,ABC,Development,2011-05-30 00:00:00.0,abhishek123@cjb.net
null39,Abhishek,DGV,a,ABC,Production,2011-05-30 00:00:00.0,abhishek123@cjb.net"""
String[] splitStr = xmlstr.split('n');
for(String str : splitStr)
{
String splitted = str.split(',');
println splitted
}
Я получаю что-то неизвестное,
[Ljava.lang.String;@148bd3
[Ljava.lang.String;@a4e743
[Ljava.lang.String;@4aeb52
Комментарии:
1. вы пробовали использовать анализатор csv?
2. Я понятия не имею о анализаторе csv
3. разделенным должно быть String[] (не String) — это была ваша единственная ошибка — смотрите Мой ответ для получения дополнительной информации
Ответ №1:
Чтобы получить количество новых строк, выполните
int newLines = myString.split("\r?\n").length;
Чтобы каждое слово разделялось запятой, выполните
String[] words = myString.split(",");
Ответ №2:
Вы также могли бы использовать splitEachLine
метод Groovy.
Это работает следующим образом:
String xmlstr = """null37,Abhishek,ARS,b,ABC,Development,2011-05-30 00:00:00.0,abhishek123@cjb.net
null38,Abhishek,SAS,c,ABC,Development,2011-05-30 00:00:00.0,abhishek123@cjb.net
null39,Abhishek,DGV,a,ABC,Production,2011-05-30 00:00:00.0,abhishek123@cjb.net"""
xmlstr.splitEachLine( /,/ ) { tokens ->
println "${tokens[1]} : ${tokens[7]}"
}
Это выводит:
Abhishek : abhishek123@cjb.net
Abhishek : abhishek123@cjb.net
Abhishek : abhishek123@cjb.net
Ответ №3:
Ваша ошибка заключалась только в том, что
String splitted = str.split(','); // Wrong
должен был быть массив:
String[] splitted = str.split(','); // Fixed
Когда программа Java печатает массивы, за первым символом L
следует класс, а затем ячейка памяти объекта.
Вот некоторый Java-код, который будет скомпилирован, чтобы вы могли увидеть проблему, которую скрывают языки сценариев:
String[] lines = originalString.split("\r?\n")); // Do this only once
int numberOfNewLines = lines.length;
int myLine = 5; // Say
String[] words = lines[myLine];
Вы могли бы легко обернуть эту идею в какой-нибудь чистый код.
Ответ №4:
символ новой строки — ‘ n’. итак, вы должны сначала разделить на ‘ n’ . затем разделить на ‘,’ .
String[] splittedByNewLine = originalString.Split('n');
for(String str : splittedByNewLine )
{
String[] splittedByComma = str.split(',');
for(String str : splittedByComma )
{
"println str..."
}
}
Комментарии:
1. Извините, OP пометил вопрос как
java
. Ваш код написан на C #.2. Я преобразовал ваш код в java и использовал его, я отредактировал свой вопрос, можете взглянуть. Спасибо за ответ