Ik moet mijn String splitsen door spaties.
Hiervoor heb ik geprobeerd:
str = "Hello I'm your String";
String[] splited = str.split(" ");
Maar het lijkt niet te werken.
Antwoord 1, autoriteit 100%
Wat je hebt, zou moeten werken. Als de beschikbare spaties echter standaard zijn… iets anders? U kunt de witruimte-regex gebruiken:
str = "Hello I'm your String";
String[] splited = str.split("\\s+");
Dit zorgt ervoor dat een willekeurig aantal opeenvolgende spaties je string in tokens splitst.
Als een kanttekening, ik weet niet zeker of “gesplitst” een woord is 🙂 Ik geloof dat het slachtoffer zijn van een splitsing ook “gesplitst” is. Het is een van die lastige grammaticale dingen 🙂 Ik probeer niet kieskeurig te zijn, ik dacht ik geef het door!
Antwoord 2, autoriteit 15%
Hoewel het geaccepteerde antwoord goed is, moet u er rekening mee houden dat u een leidende lege tekenreeks krijgt als uw invoerreeks begint met een spatie. Bijvoorbeeld met:
String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");
Het resultaat is:
splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";
Dus misschien wil je je string inkorten voordat je hem splitst:
String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");
[bewerken]
Naast het voorbehoud trim
, kunt u ook het vaste unicode-spatieteken (U+00A0
) overwegen. Dit teken wordt net als een gewone spatie in een tekenreeks afgedrukt en ligt vaak op de loer in gekopieerde tekst van RTF-editors of webpagina’s. Ze worden niet afgehandeld door .trim()
die test op tekens die moeten worden verwijderd met behulp van c <= ' '
; \s
zullen ze ook niet vangen.
In plaats daarvan kunt u \p{Blank}
gebruiken, maar u moet ook ondersteuning voor unicode-tekens inschakelen, wat de normale split
niet zal doen. Dit zal bijvoorbeeld werken: Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS).split(words)
maar het zal het gedeelte trim
niet doen .
Het volgende toont het probleem en biedt een oplossing. Het is vervan optimaal om hiervoor op regex te vertrouwen, maar nu Java 8bit / 16bit byte-representatie heeft, wordt een efficiënte oplossing hiervoor behoorlijk lang.
public class SplitStringTest
{
static final Pattern TRIM_UNICODE_PATTERN = Pattern.compile("^\\p{Blank}*(.*)\\p{Blank}$", UNICODE_CHARACTER_CLASS);
static final Pattern SPLIT_SPACE_UNICODE_PATTERN = Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS);
public static String[] trimSplitUnicodeBySpace(String str)
{
Matcher trimMatcher = TRIM_UNICODE_PATTERN.matcher(str);
boolean ignore = trimMatcher.matches(); // always true but must be called since it does the actual matching/grouping
return SPLIT_SPACE_UNICODE_PATTERN.split(trimMatcher.group(1));
}
@Test
void test()
{
String words = " Hello I'm\u00A0your String\u00A0";
// non-breaking space here --^ and there -----^
String[] split = words.split(" ");
String[] trimAndSplit = words.trim().split(" ");
String[] splitUnicode = SPLIT_SPACE_UNICODE_PATTERN.split(words);
String[] trimAndSplitUnicode = trimSplitUnicodeBySpace(words);
System.out.println("words: [" + words + "]");
System.out.println("split: [" + Arrays.stream(split).collect(Collectors.joining("][")) + "]");
System.out.println("trimAndSplit: [" + Arrays.stream(trimAndSplit).collect(Collectors.joining("][")) + "]");
System.out.println("splitUnicode: [" + Arrays.stream(splitUnicode).collect(Collectors.joining("][")) + "]");
System.out.println("trimAndSplitUnicode: [" + Arrays.stream(trimAndSplitUnicode).collect(Collectors.joining("][")) + "]");
}
}
Resulteert in:
words: [ Hello I'm your String ]
split: [][Hello][I'm your][String ]
trimAndSplit: [Hello][I'm your][String ]
splitUnicode: [][Hello][I'm][your][String]
trimAndSplitUnicode: [Hello][I'm][your][String]
Antwoord 3, autoriteit 4%
Ik geloof dat het plaatsen van een reguliere expressie tussen haakjes str.split het probleem zou moeten oplossen. De methode Java String.split() is gebaseerd op reguliere expressies, dus wat je nodig hebt is:
str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");
Antwoord 4, autoriteit 2%
Gebruik Stringutils.split()
om de string te splitsen in witte stappen. Bijvoorbeeld StringUtils.split("Hello World")
geeft als resultaat “Hallo” en “Wereld”;
Om het genoemde geval op te lossen gebruiken we de split-methode zoals deze
String split[]= StringUtils.split("Hello I'm your String");
wanneer we de gesplitste array afdrukken, is de uitvoer:
Hallo
Ik ben
uw
String
Kijk hier voor een volledige voorbeelddemo
Antwoord 5
Probeer
String[] splited = str.split("\\s");
http://download.oracle.com/javase/tutorial/ essential/regex/pre_char_classes.html
Antwoord 6
Als je op de een of andere manier de String split-methode niet wilt gebruiken, kun je de StringTokenizer-klasse in Java gebruiken als..
StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
String[] splited = new String[tokens.countTokens()];
int index = 0;
while(tokens.hasMoreTokens()){
splited[index] = tokens.nextToken();
++index;
}
Antwoord 7
Probeer deze eens
String str = "This is String";
String[] splited = str.split("\\s+");
String split_one=splited[0];
String split_second=splited[1];
String split_three=splited[2];
Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);
Antwoord 8
OK, dus we moeten splitsen omdat je het antwoord al hebt, ik zou het generaliseren.
Als je een tekenreeks wilt splitsen door spaties, gebruik dan scheidingsteken (speciale tekens).
Verwijder eerst de voorloopruimte aangezien deze de meeste problemen veroorzaken.
str1 = " Hello I'm your String ";
str2 = " Are you serious about this question_ boy, aren't you? ";
Verwijder eerst de voorloopspatie die spatie, tab enz. kan zijn.
String s = str1.replaceAll("^\\s+","");//starting with whitespace one or more
Als je nu wilt splitsen op spatie of een speciaal teken.
String[] sa = s.split("[^\\w]+");//split by any non word char
Maar aangezien w [a-zA-Z_0-9] bevat, dus als je wilt splitsen door underscore(_) gebruik je ook
String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space
Antwoord 9
Een alternatieve manier zou zijn:
import java.util.regex.Pattern;
...
private static final Pattern SPACE = Pattern.compile(" ");
String[] arr = SPACE.split(str); // str is the string to be split
Ik heb het gezien hier
Antwoord 10
Heel eenvoudig voorbeeld hieronder:
Hopelijk helpt het.
String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String
Antwoord 11
je kunt strings versimpelen met de onderstaande code
String thisString="Hello world";
String[] parts = theString.split(" ");
String first = parts[0];//"hello"
String second = parts[1];//"World"
Antwoord 12
Aangezien het een tijdje geleden is dat deze antwoorden zijn gepost, is hier nog een meer actuele manier om te doen wat er wordt gevraagd:
List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
while (sc.hasNext()) output.add(sc.next());
}
Nu heb je een lijst met strings (wat aantoonbaar beter is dan een array); als je een array nodig hebt, kun je output.toArray(new String[0]);
doen
Antwoord 13
Hier is een methode om een tekenreeks met een “,” of witruimte in te korten
private String shorterName(String s){
String[] sArr = s.split("\\,|\\s+");
String output = sArr[0];
return output;
}
Antwoord 14
Niet alleen witruimte, maar mijn oplossing lost ook de onzichtbare tekens op.
str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");
Antwoord 15
Eenvoudig om string per spatie te spugen
String CurrentString = "First Second Last";
String[] separated = CurrentString.split(" ");
for (int i = 0; i < separated.length; i++) {
if (i == 0) {
Log.d("FName ** ", "" + separated[0].trim() + "\n ");
} else if (i == 1) {
Log.d("MName ** ", "" + separated[1].trim() + "\n ");
} else if (i == 2) {
Log.d("LName ** ", "" + separated[2].trim());
}
}