【问题标题】:Splitting a string at a particular position in java在java中的特定位置拆分字符串
【发布时间】:2023-03-26 19:34:01
【问题描述】:

假设您有一个"word1 word2 word3 word4" 形式的字符串。将它拆分为split[0] = "word1 word2"split[1] = "word3 word4" 的最简单方法是什么?

编辑:澄清

我想拆分这样,而不是拆分[0] =“word1”,我有前两个词(我同意不清楚)和拆分[1]中的所有其他词,即第二个空间

【问题讨论】:

  • 为什么会有?您的标题谈到“在特定位置”,但我们不知道您是否根据字符索引或其他内容知道该位置。
  • 如果您想将每对两个单词放入一个字符串中,简单地用空格将它们全部拆分然后遍历并连接每一对可能会更容易。
  • 是的,您需要更详细地说明您正在寻找的内容。你想在中间分割,一些任意的索引,还是一些其他的规则?根据规则,您需要拆分后只需要两个项目还是更多?
  • 不清楚你在问什么。
  • 如果你只想要两个项目,你可以像这样使用 substring,String split1 = s.substring(0, Index);字符串 split2 = s.substring(Index);其中 s = "word1 word2 word3 word4"

标签: java text


【解决方案1】:

我会使用 String.substring(beginIndex, endIndex);和 String.substring(beginIndex);

String a = "word1 word2 word3 word4";
int first = a.indexOf(" ");
int second = a.indexOf(" ", first + 1);
String b = a.substring(0,second);
String c = b.subString(second); // Only startindex, cuts at the end of the string

这将导致 a = "word1 word2" 和 b = "word3 word4"

【讨论】:

  • 我更新了代码以查找第二次出现的空格“”。这是假设您的单词用空格分隔。
  • 我认为第二个索引应该从 first+1 开始,而不是 first
【解决方案2】:

您想始终成对进行此操作吗?这是 SO 社区 wiki 提供的动态解决方案,Extracting pairs of words using String.split()

String input = "word1 word2 word3 word4";
String[] pairs = input.split("(?<!\\G\\w+)\\s");
System.out.println(Arrays.toString(pairs));

输出:

[word1 word2, word3 word4]

【讨论】:

    【解决方案3】:
    String str = "word1 word2 word3 word4";
    String subStr1 = str.substring(0,12);
    String subStr2 = str.substring(12);
    

    将是您在某个位置拆分的最佳选择。如果您需要在第二次出现空格时进行拆分,则 for 循环可能是更好的选择。

    int count = 0;
    int splitIndex;
    
    for (int i = 0; i < str.length(); i++){
        if(str.charAt(i) == " "){
            count++;
        }
        if (count == 2){
            splitIndex = i;
        }
    }
    

    然后你会像上面那样将它拆分成子字符串。

    【讨论】:

    • 我建议使用 String.indexOf("foo");而是。
    • String.indexOf("foo") 只返回第一次出现的字符。您必须执行类似 String.indexOf("foo", 5) 的操作,其中第二个参数是 indexOf() 将开始搜索的索引。
    【解决方案4】:

    这应该可以实现您想要实现的目标。

    您可以使用String.split(" "); 分割初始字符串中的空格。

    然后从那里你说你想要split[0] 中的前两个词,所以我只是用一个简单的条件if(i==0 || i == 1) add it to split[0] 处理了这个

    String word = "word1 word2 word3 word4";
    String[] split = new String[2];
    //Split the initial string on spaces which will give you an array of the words.
    String[] wordSplit = word.split(" ");
    //Foreach item wordSplit add it to either Split[0] or Split[1]
    for (int i = 0; i < wordSplit.length(); i++) {
        //Determine which position to add the string to
        if (i == 0 || i == 1) split[0] += wordSplit[i] + " ";
        else {
            split[1] += wordSplit[i] + " ";
        }
    }
    

    【讨论】:

      【解决方案5】:

      如果您想将字符串拆分为两个单词的集合,此代码可能会有所帮助:

      String toBeSplit = "word1 word2 word3 word4";
      String firstSplit = a.substr(0,tBS.indexOf(" ", tBS.indexOf(" ")));
      String secondSplit = firstSplit.substr(tBS.indexOf(" ", tBS.indexOf(" ")));
      

      【讨论】:

        【解决方案6】:

        通过其公共分隔符(在本例中为空格)拆分字符串,并有条件地在输出中重新添加选择的分隔符,迭代 2

        string original = "word1 word2 word3 word4";
        string[] delimitedSplit = original.split(" ");
        for (int i = 0; i< delimitedSplit.length; i+=2) {
            if (i < delimitedSplit.length - 1 ) { //handle uneven pairs
                out.println(delimitedSplit[i] + " " + delimitedSplit[i+1] ); 
            }
            else {
                out.println(delimitedSplit[i]
            }
        

        【讨论】: