简体   繁体   中英

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

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

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).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM