因此,我们的目标是在字符串中查找类似"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;
}
}
}}
发布于 2017-02-11 15:03:14
使用这个,这里我使用"\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");这里你可以检查你的字符串
发布于 2017-02-11 15:11:37
我想你是说,例如,输入zipzapityzoop应该改为zpzpityzp,而i、a和oo则进入list。如果我误解了你的意思,请纠正我。
你已经上路了,似乎已经了解了一些基础知识。我看到的问题很小,但您当然希望修复它们:
zip、zap和zoop这样的字符串,您需要在找到的每个z之后查找p。当您在索引i处找到z时,您可以在z之后使用sen.indexOf('p', i + 1)查找p (第二个参数导致在找到z时从该i开始搜索,您将i设置回0,这将从字符串的开头开始。不需要这样做,这样你的程序就永远不会stop.sen.substring(i, p1+1)去掉所有的zip,而我知道你只想要i。您需要将参数调整为substring().sen.replace(word, "")将替换所有出现的word。因此,一旦你修复了你的程序,从zap中去掉了a,zappa将变成zpp (而不是zppa),azap将变成zp。没有一种简单的方法可以从String中只删除一个特定的子字符串。我认为解决方案是使用StringBuilder类。它有一个delete方法,可以删除两个指定索引之间的部分,这是你需要的(呃,这是不是一个家庭作业,你不应该使用你在class?)idk,但是你继续搜索sen。这就像依次将zpzapityzoop、zipzpityzoop和zipzapityzp赋值给idk,而不是zpzpityzp。但是,如果您按照我刚才的建议使用StringBuilder,则始终使用相同的StringBuilder就可以了。希望它能让你振作起来。
https://stackoverflow.com/questions/42172610
复制相似问题