Roger22
Roger22

Reputation: 133

how to split a string by position in Java

I did not find anywhere an answer.. If i have: String s = "How are you"? How can i split this into two strings, so first string containing from 0..s.length()/2 and the 2nd string from s.length()/2+1..s.length()?

Thanks!

Upvotes: 11

Views: 62222

Answers (7)

JyotiKumarPoddar
JyotiKumarPoddar

Reputation: 121

public int solution(final String S, final int K) {
    int splitCount = -1;
    final int count = (int) Stream.of(S.split(" ")).filter(v -> v.length() > K).count();
    if (count > 0) {
        return splitCount;
    }

    final List<String> words = Stream.of(S.split(" ")).collect(Collectors.toList());
    final List<String> subStrings = new ArrayList<>();
    int counter = 0;
    for (final String word : words) {
        final StringJoiner sj = new StringJoiner(" ");
        if (subStrings.size() > 0) {
            final String oldString = subStrings.get(counter);
            if (oldString.length() + word.length() <= K - 1) {
                subStrings.set(counter, sj.add(oldString).add(word).toString());
            } else {
                counter++;
                subStrings.add(counter, sj.add(word).toString());
            }
        } else {
            subStrings.add(sj.add(word).toString());
        }
    }

    subStrings.forEach(
            v -> {
                System.out.printf("[%s] and length %d\n", v, v.length());
            }
    );
    splitCount = subStrings.size();
    return splitCount;
}

public static void main(final String[] args) {

    final MessageSolution messageSolution = new MessageSolution();
    final String message = "SMSas5 ABC DECF HIJK1566 SMS POP SUV XMXS MSMS";
    final int maxSize = 11;
    System.out.println(messageSolution.solution(message, maxSize));

}

Upvotes: 0

BigMac66
BigMac66

Reputation: 1538

String s0 = "How are you?";
String s1 = s0.subString(0, s0.length() / 2);
String s2 = s0.subString(s0.length() / 2);

So long as s0 is not null.

EDIT

This will work for odd length strings as you are not adding 1 to either index. Surprisingly it even works on a zero length string "".

Upvotes: 6

aioobe
aioobe

Reputation: 420931

This should do:

String s = "How are you?";
String first = s.substring(0, s.length() / 2);  // gives "How ar"
String second = s.substring(s.length() / 2);    // gives "e you?"

(Note that if the length of the string is odd, second will have one more character than first due to the rounding in the integer division.)

Upvotes: 26

Alois Cochard
Alois Cochard

Reputation: 9862

You can use 'substring(start, end)', but of course check if string isn't null before:

String first = s.substring(0, s.length() / 2);
String second = s.substring(s.length() / 2);

And are you expecting string with odd length ? in this case you must add logic to handle this case correctly.

Upvotes: 5

Stephen C
Stephen C

Reputation: 718708

I did not find anywhere an answer.

The first place you should always look is at the javadocs for the class in question: in this case java.lang.String. The javadocs

  • can be browsed online on the Oracle website (e.g. at http://download.oracle.com/javase/6/docs/api/),
  • are included in any Sun/Oracle Java SDK distribution,
  • are probably viewable in your Java IDE, and
  • and be found using a Google search.

Upvotes: 2

Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 298818

Here's a method that splits a string into n items by length. (If the string length can not exactly be divided by n, the last item will be shorter.)

public static String[] splitInEqualParts(final String s, final int n){
    if(s == null){
        return null;
    }
    final int strlen = s.length();
    if(strlen < n){
        // this could be handled differently
        throw new IllegalArgumentException("String too short");
    }
    final String[] arr = new String[n];
    final int tokensize = strlen / n + (strlen % n == 0 ? 0 : 1);
    for(int i = 0; i < n; i++){
        arr[i] =
            s.substring(i * tokensize,
                Math.min((i + 1) * tokensize, strlen));
    }
    return arr;
}

Test code:

/**
 * Didn't use Arrays.toString() because I wanted to have quotes.
 */
private static void printArray(final String[] arr){
    System.out.print("[");
    boolean first = true;
    for(final String item : arr){
        if(first) first = false;
        else System.out.print(", ");
        System.out.print("'" + item + "'");
    }
    System.out.println("]");
}

public static void main(final String[] args){

    printArray(splitInEqualParts("Hound dog", 2));
    printArray(splitInEqualParts("Love me tender", 3));
    printArray(splitInEqualParts("Jailhouse Rock", 4));

}

Output:

['Hound', ' dog']
['Love ', 'me te', 'nder']
['Jail', 'hous', 'e Ro', 'ck']

Upvotes: 4

Buhake Sindi
Buhake Sindi

Reputation: 89169

Use String.substring(int), and String.substring(int, int) method.

int cutPos = s.length()/2;
String s1 = s.substring(0, cutPos);
String s2 = s.substring(cutPos, s.length()); //which is essentially the same as
//String s2 = s.substring(cutPos);

Upvotes: 2

Related Questions