【发布时间】:2017-06-29 13:58:39
【问题描述】:
所以目标是在字符串中寻找像“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;
}
}
}
}
【问题讨论】:
-
也许看看
String#split将String拆分为单词数组 -
如何使用 String.split 查找所有“z” (stackoverflow.com/questions/2206378/…)。然后对于列表中的每个单词,替换从第二个位置到第一个“p”之前的所有字母
-
如果“p”出现在字母“z”之前,此代码将失败。即,“xxpxxzxxpxx”失败。 “xxzxxpxxz”也失败了。那是因为您只调用 sen.indexOf('p') 一次。您应该在找到“z”后调用它,并且应该使用带有两个参数的 indexOf() 版本,这样您就可以将“z”位置指定为搜索的开始位置。
-
我知道这听起来有点愚蠢,但我不知道如何使用两个参数的方法。可以给个简单的解释吗?
标签: java arrays string arraylist indexing