Split Java String by New Line
Próbuję podzielić tekst na JTextArea
używając wyrażenia regularnego, aby podzielić Łańcuch przez \n
jednak to nie działa i próbowałem również przez \r\n|\r|n
i wiele innych kombinacji wyrażeń regularnych.
Kod:
public void insertUpdate(DocumentEvent e) {
String split[], docStr = null;
Document textAreaDoc = (Document)e.getDocument();
try {
docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
split = docStr.split("\\n");
}
17 answers
To powinno cię pokryć:
String lines[] = string.split("\\r?\\n");
Są tylko dwie nowe linie (UNIX i Windows), o które musisz się martwić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-07 14:44:08
Jeśli nie chcesz pustych linii:
String.split("[\\r\\n]+")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-18 10:21:56
split
metoda wykorzystuje regex (wyrażenia regularne). Ponieważ Java 8 regex obsługuje \R
, które reprezentuje (z dokumentację klasy wzorca):
Linebreak matcher
\R Dowolna Sekwencja linebreak Unicode, jest równoważna\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
Więc możemy użyć go do dopasowania:
-
\u000D\000A
->\r\n
para -
\u000a - > line feed (
\n
) -
\u000b - > tabulacja linii (nie mylić z tabulacją znaków
\t
, która jest\u0009
) -
\u000c - > form feed (
\f
) -
\u000d - > powrot (
\r
) - \u0085 - > next line (NEL)
- \u2028 - > separator linii
- \u2029 - > separator akapitu
Jak widzisz \r\n
jest umieszczony na początku regex, co zapewnia, że regex spróbuje najpierw dopasować tę parę , i tylko jeśli się nie powiedzie, spróbuje aby dopasować separatory linii z pojedynczym znakiem.
Więc jeśli chcesz podzielić separator on line Użyj split("\\R")
.
Jeśli nie chcesz usuwać z tablicy wynikowej kończących się pustych łańcuchów ""
użyj split(regex, limit)
z ujemnym parametrem limit
, takim jak split("\\R", -1)
.
Jeśli chcesz traktować jedną lub więcej pustych linii jako pojedynczy ogranicznik, użyj split("\\R+")
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:22
String.split(System.getProperty("line.separator"));
To powinno być niezależne od systemu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-04 11:10:54
Nie musisz podwajać znaków escape w grupach znaków.
Dla wszystkich niepustych linii użyj:
String.split("[\r\n]+")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-17 12:12:44
Może to zadziała:
Usuń podwójne ukośniki z parametru metody split:
split = docStr.split("\n");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-18 19:27:11
Do zachowania pustych linii przed zgnieceniem użyj:
String lines[] = String.split("\\r?\\n", -1);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-27 20:06:08
Wszystkie odpowiedzi podane tutaj w rzeczywistości nie respektują Java definicji nowych linii, jak podano np. w BufferedReader#readline. Java akceptuje \n
, \r
i \r\n
jako nowa linia. Niektóre odpowiedzi pasują do wielu pustych linii lub zniekształconych plików. E..g. <sometext>\n\r\n<someothertext>
Podczas używania [\r\n]+
spowoduje powstanie dwóch linii.
String lines[] = string.split("(\r\n|\r|\n)", -1);
Natomiast powyższa odpowiedź ma następujące właściwości:
- jest zgodny z definicją Javas nowej linii, np. BufferedReader używa it
- nie pasuje do wielu nowych linii
- nie usuwa końcowych pustych linii
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-19 14:18:29
Powyższy kod nie robi właściwie nic widocznego - po prostu calcualtes następnie zrzuca obliczenia. Czy to kod, którego użyłeś, czy tylko przykład na to pytanie?
Spróbuj zrobić textAreaDoc.insertString (int, String, AttributeSet) na końcu?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-18 10:23:01
Wprowadzono nową metodę lines
do klasy String
w java-11 , która zwraca Stream<String>
Zwraca strumień podłańcuchów wyciągniętych z tego łańcucha podzielonego na partycje przez Terminatorów liniowych.
Terminatorami liniowymi są linie "\n " (U + 000A) , return " \R "(U+000d) i powrót karetki, po którym następuje natychmiast linia feed " \r \ n "(U+000d u+000A).
Oto kilka przykładów:
jshell> "lorem \n ipusm \n sit".lines().forEach(System.out::println)
lorem
ipusm
sit
jshell> "lorem \n ipusm \r sit".lines().forEach(System.out::println)
lorem
ipusm
sit
jshell> "lorem \n ipusm \r\n sit".lines().forEach(System.out::println)
lorem
ipusm
sit
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 09:39:43
Jeśli z jakiegoś powodu nie chcesz używać String.split
(na przykład z powodu wyrażeń regularnych), A chcesz używać programowania funkcyjnego w Javie 8 lub nowszej:
List<String> lines = new BufferedReader(new StringReader(string))
.lines()
.collect(Collectors.toList());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 19:51:32
String lines[] =String.split( System.lineSeparator())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 16:30:59
Po nieudanych próbach na podstawie wszystkich podanych rozwiązań. Zamieniam \n
jakimś specjalnym słowem, a następnie dzielę. Dla mnie po wykonaniu triku:
article = "Alice phoned\n bob.";
article = article.replace("\\n", " NEWLINE ");
String sen [] = article.split(" NEWLINE ");
Nie mogłem powtórzyć przykładu podanego w pytaniu. Ale myślę, że tę logikę można zastosować.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-11 16:23:35
Jako alternatywa dla poprzednich odpowiedzi, API Splitter
guava może być używane, jeśli do wynikowych linii mają być zastosowane inne operacje, takie jak przycinanie linii lub filtrowanie pustych linii:
import com.google.common.base.Splitter;
Iterable<String> split = Splitter.onPattern("\r?\n").trimResults().omitEmptyStrings().split(docStr);
Zwróć uwagę, że wynik jest Iterable
, a nie tablicą.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-08 09:19:51
- Spróbuj tej nadziei, że to było pomocne dla ciebie
String split[], docStr = null;
Document textAreaDoc = (Document)e.getDocument();
try {
docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
split = docStr.split("\n");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 12:21:55
Istnieją trzy różne konwencje (można powiedzieć, że są to de facto standardy) do ustawiania i wyświetlania podziału linii:
-
carriage return
+line feed
line feed
carriage return
W niektórych edytorach tekstu istnieje możliwość wymiany jednego na drugi:
Najprostszą rzeczą jest normalizacja do line feed
, a następnie podział.
final String[] lines = contents.replace("\r\n", "\n")
.replace("\r", "\n")
.split("\n", -1);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-31 04:15:32
package in.javadomain;
public class JavaSplit {
public static void main(String[] args) {
String input = "chennai\nvellore\ncoimbatore\nbangalore\narcot";
System.out.println("Before split:\n");
System.out.println(input);
String[] inputSplitNewLine = input.split("\\n");
System.out.println("\n After split:\n");
for(int i=0; i<inputSplitNewLine.length; i++){
System.out.println(inputSplitNewLine[i]);
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-22 20:39:23