5

我有类似的字符串"align is going to school sad may me"。我想在四个空格之后获取子字符串。字符串将在运行时输入。任何人都可以建议我在一些空格后找到子字符串......

String st = "align is going to school sad may me";

int i = 0;
String [] strings = new String [15];
StringTokenizer stringTokenizer = new StringTokenizer (st, " ");

while (stringTokenizer.hasMoreElements ())
{
    strings [i]= (String)stringTokenizer.nextElement ();
    i++;
}
System.out.println ("I value is" + i);

for (int j=4; j<i; j++)
{
    System.out.print (strings[j] + " ");
}

我已经尝试过这个并且它正在工作,您能否建议我在一些空格后找到 Sub 字符串的简单方法。

4

7 回答 7

10
st = st.replaceAll("^(\\S*\\s){4}", "");

^表示我们只从字符串的第一个字符中删除。

\s是任何空白。例如,它还将删除表格。

\S是任何非空白字符。

*表示该字符出现的任意次数。

因此,\S*在空白之前是任意数量的非空白字符。

{4}显然是因为您要删除 4 个空格。

您还可以使用:

st = st.replaceFirst("(\\S*\\s){4}", "");

这是相同的,但你不需要 ^.

如果输入字符串的空格少于 4 个:

st = st.replaceAll("^(\\S*\\s){1,4}", "");

仅当字符串不以空格结尾时,才会返回字符串的最后一个单词。如果你先打电话,你可以确定这一点trim

st = st.trim().replaceAll("^(\\S*\\s){1,4}", "");
于 2013-02-04T12:35:07.940 回答
5

使用拆分怎么样?

st.split (" ", 5) [4]

它按空格将字符串拆分为不超过 5 个块。最后一个块(索引为 4)将包含第四个空格之后的所有内容。

如果不能保证字符串包含 4 个空格,则需要额外检查:

String [] chunks = st.split (" ", 5);
String tail = chunks.length == 5 ? chunks [4] : null;

Tail 将包含第四个空格或 null 之后的所有内容,原始字符串中是否少于四个空格。

于 2013-02-04T12:32:05.253 回答
1
public static void main(String[] args) {
    String st = "   align is going to school sad may me   ";
    String trim = st.trim(); // if given string have space before and after string.
    String[] splitted = trim.split("\\s+");// split the string into words.
    String substring = "";
    if (splitted.length >= 4) { // checks the condition
        for (int i = 4; i < splitted.length; i++)
            substring = substring + splitted[i] + " ";
    }
    System.out.println(substring);

}
于 2013-02-04T13:24:11.680 回答
0
public class MySplit {
    public static void main(String agsp[]) {
        String oldString = "roma h totti milan kaka juve love";
        String[] allStrings = oldString.split("\\s");
        String newString = "";
        for (int i = 3; i < allStrings.length; i++)
            newString = newString + " " + allStrings[i];
        System.out.println(newString);
    }
}

你也可以制作这样的功能

public String newSplit(String data, int index){
            String[] allStrings = data.split("\\s");
            String newString = "";
            for (int i = index; i < allStrings.length; i++)
                newString = newString + " " + allStrings[i];
            return newString
}
于 2013-02-04T12:37:08.377 回答
0

这可能有点矫枉过正,但它使用简单的字符串操作 ( just str.indexOf(' '))。如果您需要学校项目或其他东西:

String str ="ada adasd dasdsa d adasdad dasasd";

int targetMatch = 4;
int offset = 0;
for(int i = 0 ; i < targetMatch; i++){
     int position = str.indexOf(' ', offset);
     if(position != -1){
          System.out.println("position: "+ position);
          offset = position+1;
        }
     }

String result = str.substring(offset);
System.out.println(result);

对于真正的项目......高级正则表达式会更好。

于 2013-02-04T12:46:19.333 回答
0

这是一个解决您的问题的简单而简单的实现:

String s = "I've tried this one and it's working can you please suggest";

int index = -1;
for (int i = 0; i < 4; i++) {
    index = s.indexOf(' ', index + 1);
}
System.out.println(s.substring(index + 1));

如果字符串以空格开头或包含空格序列,它将失败。但这是一个开始。

输出:and it's working can you please suggest

于 2013-02-04T12:48:36.773 回答
0

使用这段代码的简单方法

String thisString="Hello world go to kashmir";

String[] parts = theString.split(" ");
String first = parts[0];//"hello"
String second = parts[1];//"World"
String first = parts[3];//"hello"
String second = parts[4];//"World"
于 2018-05-31T11:07:09.527 回答