Use the appropriately named method String#split().

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

Note that split's argument is assumed to be a regular expression, so remember to escape special characters if necessary.

there are 12 characters with special meanings: the backslash \, the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening parenthesis (, the closing parenthesis ), and the opening square bracket [, the opening curly brace {, These special characters are often called "metacharacters".

For instance, to split on a period/dot . (which means "any character" in regex), use either backslash \ to escape the individual special character like so split("\\."), or use character class [] to represent literal character(s) like so split("[.]"), or use Pattern#quote() to escape the entire string like so split(Pattern.quote(".")).

String[] parts = string.split(Pattern.quote(".")); // Split on the exact string.

To test beforehand if the string contains certain character(s), just use String#contains().

if (string.contains("-")) {
    // Split it.
} else {
    throw new IllegalArgumentException("String " + string + " does not contain -");
}

Note, this does not take a regular expression. For that, use String#matches() instead.

If you'd like to retain the split character in the resulting parts, then make use of positive lookaround. In case you want to have the split character to end up in left hand side, use positive lookbehind by prefixing ?<= group on the pattern.

String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556

In case you want to have the split character to end up in right hand side, use positive lookahead by prefixing ?= group on the pattern.

String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556

If you'd like to limit the number of resulting parts, then you can supply the desired number as 2nd argument of split() method.

String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42
Answer from BalusC on Stack Overflow
🌐
GeeksforGeeks
geeksforgeeks.org › java › java-split-a-string-by-character
Java - Split a String by Character - GeeksforGeeks
July 23, 2025 - In Java, we can use the split() method from the String class to split a string by character, which simplifies this process by taking a regular expression (regex) as its argument.
Top answer
1 of 11
3416

Use the appropriately named method String#split().

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

Note that split's argument is assumed to be a regular expression, so remember to escape special characters if necessary.

there are 12 characters with special meanings: the backslash \, the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening parenthesis (, the closing parenthesis ), and the opening square bracket [, the opening curly brace {, These special characters are often called "metacharacters".

For instance, to split on a period/dot . (which means "any character" in regex), use either backslash \ to escape the individual special character like so split("\\."), or use character class [] to represent literal character(s) like so split("[.]"), or use Pattern#quote() to escape the entire string like so split(Pattern.quote(".")).

String[] parts = string.split(Pattern.quote(".")); // Split on the exact string.

To test beforehand if the string contains certain character(s), just use String#contains().

if (string.contains("-")) {
    // Split it.
} else {
    throw new IllegalArgumentException("String " + string + " does not contain -");
}

Note, this does not take a regular expression. For that, use String#matches() instead.

If you'd like to retain the split character in the resulting parts, then make use of positive lookaround. In case you want to have the split character to end up in left hand side, use positive lookbehind by prefixing ?<= group on the pattern.

String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556

In case you want to have the split character to end up in right hand side, use positive lookahead by prefixing ?= group on the pattern.

String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556

If you'd like to limit the number of resulting parts, then you can supply the desired number as 2nd argument of split() method.

String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42
2 of 11
91

An alternative to processing the string directly would be to use a regular expression with capturing groups. This has the advantage that it makes it straightforward to imply more sophisticated constraints on the input. For example, the following splits the string into two parts, and ensures that both consist only of digits:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class SplitExample
{
    private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");

    public static void checkString(String s)
    {
        Matcher m = twopart.matcher(s);
        if (m.matches()) {
            System.out.println(s + " matches; first part is " + m.group(1) +
                               ", second part is " + m.group(2) + ".");
        } else {
            System.out.println(s + " does not match.");
        }
    }

    public static void main(String[] args) {
        checkString("123-4567");
        checkString("foo-bar");
        checkString("123-");
        checkString("-4567");
        checkString("123-4567-890");
    }
}

As the pattern is fixed in this instance, it can be compiled in advance and stored as a static member (initialised at class load time in the example). The regular expression is:

(\d+)-(\d+)

The parentheses denote the capturing groups; the string that matched that part of the regexp can be accessed by the Match.group() method, as shown. The \d matches and single decimal digit, and the + means "match one or more of the previous expression). The - has no special meaning, so just matches that character in the input. Note that you need to double-escape the backslashes when writing this as a Java string. Some other examples:

([A-Z]+)-([A-Z]+)          // Each part consists of only capital letters 
([^-]+)-([^-]+)            // Each part consists of characters other than -
([A-Z]{2})-(\d+)           // The first part is exactly two capital letters,
                           // the second consists of digits
Discussions

algorithm - Split string by character in Java - Code Review Stack Exchange
I have this code, which goes through a string and split it using a char delimiter. I am concerned where it can be improved. Main concerns are speed and memory usage with speed as the priority. Any... More on codereview.stackexchange.com
🌐 codereview.stackexchange.com
March 18, 2017
java - Split string into array of character strings - Stack Overflow
You will have a extra character in your Array... 2011-03-08T16:48:50.467Z+00:00 ... The "cat".split("") does not work as expected by Matt, you will get an extra empty String => [, c, a, t]. 2011-03-08T16:57:44.643Z+00:00 ... This answer does now work if you're using Java 8. More on stackoverflow.com
🌐 stackoverflow.com
Split String every nth char / or the first occurrence of a period
No, because those two statements contradict; you can't break up the string by every 15th character, and also have each end with a period. hello world. my name is bob. how are you doing today abcd. efghijklmnop You could achieve something like this using String.replaceAll and a regular expression, but it doesn't break it up by every 15th character; some of these lines are more than 15 characters. hello world. my name is bob. how are you doing today abcd. efghijklmnop. You could achieve something like this using the WordUtils class from commons-lang. It word wraps the string by every 15th character, but several lines don't always end in a "." Hopefully this starts you toward the right path. More on reddit.com
🌐 r/java
8
0
August 28, 2013
Split a string with multiple delimiters

Erm, you can just put all of the delimiters you want in the quotes for the string passed to .split()

[PS] C:\Users\> $string = "part1.part2;part3"
[PS] C:\Users\> $string.split(".;")
part1
part2
part3
More on reddit.com
🌐 r/PowerShell
7
19
October 14, 2014
🌐
Sentry
sentry.io › sentry answers › java › how to split a string in java
Java String Split: Use String.split() With Regex | Sentry
September 23, 2026 - public class Main { public static void main(String[] arg) { String str = "how:to::split:::a:string:in:java"; String[] arrOfStr = str.split(":+"); for (String a : arrOfStr) { System.out.println(a); } } } The output of this example will be the same as the output of the previous example, as the regex ignores the additional colons. This means that if you want to split a string on a character that has special meaning in regular expressions, you need to escape it. For example, to split a string on a period (.), use str.split("\\.").
🌐
W3Schools
w3schools.com › java › ref_string_split.asp
Java String split() Method
The split() method splits a string into an array of substrings using a regular expression as the separator. If a limit is specified, the returned array will not be longer than the limit.
🌐
Baeldung
baeldung.com › home › java › java string › java string.split()
Java.String.split() | Baeldung
July 15, 2026 - In this article, we explored the String.split() method, which allows us to divide strings into smaller substrings based on specified delimiters. We learned how to use this method with regular expressions, handle different character encodings, and work with multiple delimiters.
🌐
TutorialKart
tutorialkart.com › java › how-to-split-a-string-with-specific-character-as-delimiter-in-java
How to Split a String with Specific Character as Delimiter in Java?
January 13, 2021 - To split a string with specific character as delimiter in Java, call split() method on the string object, and pass the specific character as argument to the split() method. The method returns a String Array with the splits as elements in the array.
Top answer
1 of 3
6

Sloppiness

There are several careless mistakes that are easy to fix.

Don't use implementation types in declaration, unless you really need to use a specific feature of that implementation:

ArrayList<String> arr = new ArrayList<String>();

Use the interface type instead:

List<String> arr = new ArrayList<String>();

Instead of creating a new StringBuilder, it might be faster to reset it, like this:

sb.setLength(0);

See this discussion for more details.


Don't convert a List to an array like this:

return arr.toArray(new String[0]);

It's recommended to pass a correctly sized array:

return arr.toArray(new String[arr.size()]);

Better unit tests

Give your test cases meaningful names. So that when your IDE reports some of them failing, it will be easier to understand what failed. For example:

@Test
public void testNormalSentence() {
    final String str1 = "Because";
    final String str2 = "I'm";
    final String str3 = "Batman";
    final char delim = ' ';
    String[] parts = StringUtility.split(str1 + delim + str2 + delim + str3, delim);
    Assert.assertEquals(Arrays.asList(str1, str2, str3), Arrays.asList(parts));
}

@Test
public void testStartingWithDelim() {
    final String str1 = "";
    final String str2 = "I'm";
    final String str3 = "Batman";
    final char delim = ' ';
    String[] parts = StringUtility.split(str1 + delim + str2 + delim + str3, delim);
    Assert.assertEquals(Arrays.asList(str1, str2, str3), Arrays.asList(parts));
}

@Test
public void testEmptyString() {
    final String str1 = "";
    final char delim = ' ';
    String[] parts = StringUtility.split(str1, delim);
    Assert.assertEquals(Arrays.asList(str1), Arrays.asList(parts));
}

These new names describe well exactly what they are testing. This should help understanding the code.


The assertions can be simplified, instead of:

String[] parts = StringUtility.split(str1 + delim + str2 + delim + str3, delim);
Assert.assertTrue(parts.length == 3);
Assert.assertTrue(parts[0].equals(str1));
Assert.assertTrue(parts[1].equals(str2));
Assert.assertTrue(parts[2].equals(str3));

You could simplify like this:

String[] parts = StringUtility.split(str1 + delim + str2 + delim + str3, delim);
Assert.assertEquals(Arrays.asList(str1, str2, str3), Arrays.asList(parts));

This is exactly the same, but shorter, and a lot easier to write.


I would add some more test cases:

@Test
public void testOnlyDelim() {
    final String str1 = "";
    final char delim = ' ';
    String[] parts = StringUtility.split("" + delim + delim, delim);
    Assert.assertEquals(Arrays.asList(str1, str1, str1), Arrays.asList(parts));
}

@Test
public void testNotContainingDelim() {
    final String str1 = "hello";
    final char delim = 'x';
    String[] parts = StringUtility.split(str1, delim);
    Assert.assertEquals(Arrays.asList(str1), Arrays.asList(parts));
}

Suggested implementation

@heslacher's implementation is very close to my taste. Here's a variation of that, with some minor changes:

public static String[] split(String strToSplit, char delimiter) {
    List<String> arr = new ArrayList<>();
    int foundPosition;
    int startIndex = 0;
    while ((foundPosition = strToSplit.indexOf(delimiter, startIndex)) > -1) {
        arr.add(strToSplit.substring(startIndex, foundPosition));
        startIndex = foundPosition + 1;
    }
    arr.add(strToSplit.substring(startIndex));
    return arr.toArray(new String[arr.size()]);
}
2 of 3
4

The first thought that came to my mind has been why creating always a new StringBuilder after the delimiter is found. So I changed this and called the setLength() with zero as parameter like

public static String[] split(String strToSplit, char delimiter) {
    ArrayList<String> arr = new ArrayList<String>();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < strToSplit.length(); i++) {
        char at = strToSplit.charAt(i);
        if (at == delimiter) {
            arr.add(sb.toString());
            sb.setLength(0);
        } else {
            sb.append(at);
        }
    }
    arr.add(sb.toString());
    return arr.toArray(new String[0]);
}

The next I thought, why use a StringBuilder and the CharAt(), if a indexOf() could be used, so I changed it to

public static String[] split(String strToSplit, char delimiter) {
    ArrayList<String> arr = new ArrayList<String>();
    int foundPosition = 0;
    int startIndex = 0;
    while ((foundPosition = strToSplit.indexOf(delimiter, startIndex)) >= 0) {

        arr.add(strToSplit.substring(startIndex, foundPosition));
        startIndex = foundPosition + 1;

    }
    arr.add(strToSplit.substring(startIndex));
    return arr.toArray(new String[0]);
}

You need to profile it by yourself.

Find elsewhere
🌐
Apps Developer Blog
appsdeveloperblog.com › home › java › how to split a string in java: different examples
How to Split a String in Java: Different Examples
June 4, 2023 - String characters = "a.b.c"; String[] charactersArray = characters.split("(?<=\\.)"); Let’s have a look at the complete example. import java.util.regex.Pattern; public class App { public static void main(String[] args) { String characters = "a.b.c"; String[] charactersArray = characters.split("(?<=\\.)"); for (String character : charactersArray) { System.out.println(character); } } } The output is: a.
🌐
Interview Kickstart
interviewkickstart.com › home › blogs › learn › java string split() method: syntax, delimiters, and examples
Understanding Java String Split() Method | Interview Kickstart
April 1, 2026 - A character set is defined by wrapping the desired delimiters in square brackets [ ]. A regex character set like [,;|] tells the Java split() method to treat each character inside the brackets as an individual valid delimiter.
🌐
Medium
medium.com › @AlexanderObregon › javas-string-split-method-explained-77bdaddaae79
Java’s String split() Method Explained
June 25, 2024 - Regular expressions allow for powerful string splitting capabilities. For example, you can split a string based on a pattern that includes multiple characters or conditions. Consider splitting a string by any non-word character (anything that is not a letter, number, or underscore):
🌐
Mkyong
mkyong.com › home › java › how to split a string in java
How to split a string in Java | mkyong.com
February 9, 2022 - If we want to split a string using one of the special regex characters as the delimiter, we must escape it. For example, if we want to split a string by a vertical bar or pipe symbol | (special regex character), which means or in the regex, ...
🌐
Codefinity
codefinity.com › courses › v2 › 0bfa1111-8677-478f-bcd3-315dff1d7d40 › 421ab035-77e8-4fef-abb9-488c91c2d1f9 › 433c4bac-9f33-4b48-9be0-cdc81423c941
Learn Method split() | String Advanced
The split(String delimiter) method splits a string into an array of substrings based on the specified delimiter (a character or sequence of characters). It returns an array where each element is a substring from the original string, separated ...
🌐
YouTube
youtube.com › watch
How to Split String in Java - YouTube
split string javaSplit() String method in Java with examplesHow to split a string in JavaJava String split() methodsplit in javajava split(string by characte...
Published: December 11, 2021
🌐
YouTube
youtube.com › watch
How to split a Java String - 052 - YouTube
In this tutorial we're going to look at how to split a string in Java. We can split the string by character or split the string by words. We'll look at both!...
Published: December 12, 2016
🌐
BeginnersBook
beginnersbook.com › 2013 › 12 › java-string-split-method-example
Java String split() Method with examples
You can split string by dot ( . ) using \. regex in split method. Input: "Just.a.Simple.String"; Output: ["Just", "a", "Simple", "String"] ... The ?! part in this regex is negative assertion, which it works like a not operator in the context of regular expression. The ^ is to match the beginning of the string. Together it matches any character that is not the beginning of the string, which means it splits the string on every character.
🌐
CodeGym
codegym.cc › java blog › strings in java › java string split() method
Java String split method
December 5, 2024 - It's just what you need when you have to split a string into its component parts with the help of a special delimiter. The method returns an array of strings (the substrings that comprise the original string). It accepts a regular expression whose matches represent the delimiter character(s).
🌐
Scaler
scaler.com › home › topics › split() string method in java with examples
split() String Method in Java with Examples - Scaler Topics
April 11, 2024 - The split() method returns an array ... if the regular expression provided is invalid. ... Note: If we need to use a special character such as \, |, ^, *, + etc., we can use an escape sequence to escape these characters....
🌐
iO Flood
ioflood.com › blog › java-string-split
How to Split Strings in Java: Methods and Examples
February 20, 2024 - In this example, even though we split the string, the original string ‘Hello, World!’ remains unchanged. A regular expression, often shortened to ‘regex’, is a sequence of characters that forms a search pattern. This pattern can be used to match, locate, and manage text. Java’s split() method uses regular expressions to determine where to split a string.
🌐
CodeSignal
codesignal.com › learn › courses › java-string-manipulation-for-beginners › lessons › string-alchemy-splitting-and-joining-in-java-for-text-wizards
String Alchemy: Splitting and Joining in Java for Text Wizards
In Java, the split() method divides a string into several substrings based on a delimiter — a character that separates words. It stores these substrings into an array.