因此,目标是在字符串中查找“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;
}
}
}
}
使用这个,这里我使用 " 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");
在这里你可以检查你的字符串
我认为您是说,例如,输入
zipzapityzoop
应该更改为 zpzpityzp
,其中 i
、a
和 oo
进入 list
。
你已经在路上了,似乎已经了解了基础知识。我看到的问题都很小,但你当然想解决它们。我不会为您提供所有要点的完整解决方案,而是试图为您指出正确的方向。
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
就可以了。