AbRe
AbRe

Reputation: 162

How to split string based on length and space using Java

I'm having a string as following in Java. The length of the string is not known and as an example it will be something like below.

String str = "I love programming. I'm currently working with Java and C++."

For some requirement I want to get first 15 characters. Then 30, 45, 70 next characters. Once the string was split if the name was not meaningful then it should be split from nearest space. For the above example output is as following.

String strSpli1 = "I love "; //Since 'programming' is splitting it was sent to next split
String strSpli2 = "programming. I'm currently ";//Since 'working'  is splitting it was sent to next split
String strSpli3 = "working with Java and C++.";

Please help me to achieve this.

Updated answer for anybody having this kind of requirement.

 String str = "I love programming. I'm currently working with Java and C++.";
                String strSpli1 = "";
                String strSpli2 = "";
                String strSpli3 = "";

    try {
                strSpli1 = str.substring(15);
                int pos = str.lastIndexOf(" ", 16);
                if (pos == -1) {
                    pos = 15;
                }
                strSpli1 = str.substring(0, pos);
                str = str.substring(pos);
    
                try {
                    strSpli2 = str.substring(45);
                    int pos1 = str.lastIndexOf(" ", 46);
                    if (pos1 == -1) {
                        pos1 = 45;
                    }
                    strSpli2 = str.substring(0, pos1);
                    str = str.substring(pos1);
    
                    try {
                        strSpli3 = str.substring(70);
                        int pos2 = str.lastIndexOf(" ", 71);
                        if (pos2 == -1) {
                            pos2 = 45;
                        }
                        strSpli3 = str.substring(0, pos2);
                        str = str.substring(pos2);
    
                    } catch (Exception ex) {
                        strSpli3 = str;
                    }
    
                } catch (Exception ex) {
                    strSpli2 = str;
                }
            } catch (Exception ex) {
                strSpli1 = str;
            }

Thank you

Upvotes: 0

Views: 1259

Answers (2)

user15793316
user15793316

Reputation:

use the 2 parameter version of lastIndexOf() to search for space backwards starting from a given position. Example for the first 15 characters:

int pos = str.lastIndexOf(" ", 16);
if (pos == -1) {
    pos = 15;
}
String found = str.substring(0, pos);
str = str.substring(pos+1);

this is missing checks like ensuring the string starts with at least 15 characters, or that pos+1 is valid for given length


suggest having a look at java.text.BreakIterator

Upvotes: 2

robihidayat
robihidayat

Reputation: 37

why you use so many try catch ? just try this.

public class MyClass {
public static void main(String args[]) {
    String str = "I love programming. I'm currently working with Java and C++.";
    String strSpli1 = "";
    String strSpli2 = "";
    String strSpli3 = "";
    strSpli1 = str.substring(0, 7);
    strSpli2 = str.substring(7, 33);
    strSpli3 = str.substring(34, str.length());
   

     System.out.println(strSpli1+"\n");
     System.out.println(strSpli2+"\n");
     System.out.println(strSpli3+"\n");

}

use substring(start index, end index).

Upvotes: -1

Related Questions