5

私はのような文字列を持っています"align is going to school sad may me"。4つのスペースの後にサブ文字列を取得したいと思います。文字列は実行時に入力されます。誰かが私にいくつかのスペースのセットの後にサブ文字列を見つけることを提案できますか......

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] + " ");
}

私はこれを試しましたが、うまくいきました。スペースのセットの後にサブ文字列を見つける簡単な方法を提案してください。

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 番目のスペース以降のすべてが含まれます。

文字列に 4 つのスペースが含まれていることが保証されない場合は、追加のチェックが必要です。

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

元の文字列に 4 つ未満のスペースがある場合、末尾には 4 番目のスペースまたは 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

問題を解決する簡単で簡単な実装を次に示します。

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

これはやり過ぎかもしれませんが、単純な文字列操作 ( 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 に答える