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

问题描述 投票:0回答:2

因此,目标是在字符串中查找“zip”和“zap”等模式,以“z”开头并以“p”结尾。然后,对于所有此类字符串,删除中间的字母。

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

我怎样才能做到这一点?

这是我到目前为止的代码:

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;
            }
        }
    }

}
java arrays string arraylist indexing
2个回答
1
投票

使用这个,这里我使用 " z.p " 模式来查找任何包含以 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


0
投票

我认为您是说,例如,输入

zipzapityzoop
应该更改为
zpzpityzp
,其中
i
a
oo
进入
list

你已经在路上了,似乎已经了解了基础知识。我看到的问题都很小,但你当然想解决它们。我不会为您提供所有要点的完整解决方案,而是试图为您指出正确的方向。

  • 正如@RicharsSchwartz提到的,要查找像
    zip
    zap
    zoop
    这样的所有字符串,您需要在找到每个
    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
    中取出
    zap
    zappa
    将变为
    zpp
    (不是
    zppa
    ),而
    azap
    将变为
    zp
    。没有简单的方法可以从
    String
    中删除特定出现的一个子字符串。我认为解决方案是使用
    StringBuilder
    类。它有一个
    delete
    方法,可以删除两个指定索引之间的部分,这正是您所需要的(前提是允许您使用
    StringBuilder
    )。
  • 最后,您将更改后的字符串分配给不同的变量
    idk
    ,但随后您继续搜索
    sen
    。这就像依次将
    zpzapityzoop
    zipzpityzoop
    zipzapityzp
    分配给
    idk
    ,但绝不分配
    zpzpityzp
    。但是,如果您按照我刚才的建议使用
    StringBuilder
    ,只需自始至终使用相同的
    StringBuilder
    就可以了。
© www.soinside.com 2019 - 2024. All rights reserved.