-->

Copy the first N words in a string in java

2019-09-20 06:18发布

问题:

I want to select the first N words of a text string. I have tried split() and substring() to no avail. What I want is to select the first 3 words of the following prayer and copy them to another variable.

For example if I have a string:

String greeting = "Hello this is just an example"

I want to get into the variable Z the first 3 words so that

Z = "Hello this is"

回答1:

    String myString = "Copying first N numbers of words to a string";
    String [] arr = myString.split("\\s+"); 
         //Splits words & assign to the arr[]  ex : arr[0] -> Copying ,arr[1] -> first


        int N=3; // NUMBER OF WORDS THAT YOU NEED
        String nWords="";

        // concatenating number of words that you required
        for(int i=0; i<N ; i++){
             nWords = nWords + " " + arr[i] ;         
        }

    System.out.println(nWords);



NOTE : Here .split() function returns an array of strings computed by splitting a given string around matches of the given regular expression

so if i write the code like follows

String myString = "1234M567M98723651";
String[] arr = myString.split("M"); //idea : split the words if 'M' presents

then answers will be :
1234 and 567 where stored into an array.

This is doing by storing the split values into the given array. first split value store to arr[0], second goes to arr[1].

Later part of the code is for concatenating the required number of split words

Hope that you can get an idea from this!!!
Thank you!



回答2:

public String getFirstNStrings(String str, int n) {
    String[] sArr = str.split(" ");
    String firstStrs = "";
    for(int i = 0; i < n; i++)
        firstStrs += sArr[i] + " ";
    return firstStrs.trim();
}

Now getFirstNStrings("Hello this is just an example", 3); will output:

Hello this is



回答3:

You could try something like:

String greeting = "Hello this is just an example";
int end = 0;
for (int i=0; i<3; i++) {
    end = greeting.indexOf(' ', end) + 1;
}
String Z = greeting.substring(0, end - 1);

N.B. This assumes there are at least three space characters in your source string. Any less and this code will probably fail.



回答4:

Add this in a utility class, such as Util.java

public static String getFirstNWords(String s, int n) {
    if (s == null) return null;
    String [] sArr = s.split("\\s+");
    if (n >= sArr.length)
        return s;

    String firstN = "";

    for (int i=0; i<n-1; i++) {
        firstN += sArr[i] + " ";
    }
    firstN += sArr[n-1];
    return firstN;
}

Usage: Util.getFirstNWords("This will give you the first N words", 3); ----> "This will give"



回答5:

If you use Apache Commons Lang3, you can make it a little shorter like this:

public String firstNWords(String input, int numOfWords) {
    String[] tokens = input.split(" ");
    tokens = ArrayUtils.subarray(tokens, 0, numOfWords);
    return StringUtils.join(tokens, ' ');
}