如何将字符串的多个部分放入列表?

时间:2017-02-11 05:32:23

标签: java arrays string arraylist indexing

所以我们的目标是寻找像" zip"和" zap"在字符串中,以' z'开头并以' p'结尾。然后,对于所有这些字符串,删除中间字母。

我的想法是,我使用for循环来检查字符串的每个字母,一旦它到达' z'它就会得到indexOf(' p')并将中间的所有内容放入ArrayList中,同时从原始字符串中删除自己,以便找到indexOf(' p')。

问题是我找不到办法,因为我对Java很新。如果有人可以提供帮助,我会感激不尽:)

到目前为止这是我的代码

package Homework;

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class ZipZap {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    List<String> list = new ArrayList<String>();

    System.out.print("Write a sentence with no spaces:");
    String sen = in.next();
    int len = sen.length();
    int p1 = sen.indexOf('p');
    String word = null;
    String idk = null;

    for(int i=0; i<len; i++){
        if(sen.charAt(i)=='z'){
            word = sen.substring(i, p1+1);
            list.add(word);
            idk = sen.replace(word,"");
            i=0;
        }
    }
}

}

2 个答案:

答案 0 :(得分:1)

使用这个,这里我使用“\ bz.p \ b”模式来查找包含z的起始字符的任何单词,并以p结尾,任何内容都可以介于

之间
 String s ="Write a sentence with no zip and zap spaces:";
 s=s.replaceAll("\\bz.p\\b", "zp");
 System.out.println(s);

<强>输出:

Write a sentence with no zp and zp spaces:

或者可以是

 s.replaceAll("z\\w+p", "zp");

在这里你可以检查字符串

https://regex101.com/r/aKaNTJ/2

答案 1 :(得分:0)

我认为您说输入zipzapityzoop应该更改为zpzpityzp iaoo进入list {1}}。如果我误解了你的意图,请纠正我。

你正在路上,似乎了解基础知识。我看到的问题很小,但当然你想解决它们:

  • 正如@RicharsSchwartz所提到的,要查找所有字符串,例如zipzapzoop,您需要在找到p之后找到z。当您在索引z找到i时,您可以使用sen.indexOf('p', i + 1)p之后找到z(第二个参数会导致搜索开始于那个指数)。
  • 每次找到z时,都会将i设置为0,从字符串的开头开始。不需要这样做,这样你的程序永远不会停止。
  • 当我理解你只想sen.substring(i, p1+1)时,
  • zip取出所有i。您需要将参数调整为substring()
  • 您对sen.replace(word, "")的使用将取代word的所有出现。因此,一旦您修改程序以从a取出zapzappa将变为zpp(不是zppa),azap将成为zp String。没有简单的方法可以从StringBuilder中删除一个特定的子字符串。我认为解决方案是使用delete类。它有一个idk方法,它将删除两个指定索引之间的部分,这是你需要的(呃,这是一个家庭作业,你不应该使用你没有在课堂上学过的课程? )
  • 最后,您将更改后的字符串分配给其他变量sen,然后继续搜索zpzapityzoop。这就像依次将zipzpityzoopzipzapityzpidk分配给zpzpityzp,但从不StringBuilder。但是,如果您按照我的建议使用StringBuilder,那么只需使用相同的if(((n1,n2,n3,n4,n5)%2)==0) //it only check for n5 because comma operator seperates the values and gives only last value(i.e. n5) for computaion. ,您就可以了。

希望它能帮到你。