2017-02-11 55 views
0

因此,我们的目标是在字符串中查找“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; 
     } 
    } 
} 

}

+0

也许看看'String#split'将'String'拆分为一个单词数组 – MadProgrammer

+0

使用String.split来查找所有的“z”(http://stackoverflow.com/questions/2206378 /如何对分裂一个字符串,但是,也-保持最分隔符)。那么对于列表中的每个单词,将第二个位置的所有字母替换为第一个“p”之前 –

+0

如果在字母“z”之前出现“p”,则此代码将失败。即,“xxpxxzxxpxx”失败。它也失败了“xxzxxpxxz”。那是因为你只调用sen.indexOf('p')一次。您应该在找到'z'后调用它,并且应该使用带有两个参数的indexOf()版本,以便您可以指定'z'位置作为搜索的起始位置。 –

回答

1

利用这一点,我在这里使用“\ bz.p \ B”图案查找用于包含开始炭与z和端用对什么都可以

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

很酷的链接。 ***** –

+0

谢谢@NickZiebert –

+0

哦,这有助于很多!谢谢:) –

0

我觉得你说的输入zipzapityzoop,例如,应改变到zpzpityzpi,aoo进入list。如果我误解了你的意图,请纠正我。

你在路上,似乎了解基础知识。我看到的问题是次要的,但当然要解决这些问题:

  • 作为@RicharsSchwartz提到,要找到像zipzapzoop所有字符串,你需要找到每z你找到后p。当您在索引i处发现z时,可以使用sen.indexOf('p', i + 1)z(第二个参数导致搜索从该索引处开始)之后找到p
  • 每次找到z时,都会将i设置回0,从字符串的开头开始。没有必要这样做,这样你的程序永远不会停止。
  • sen.substring(i, p1+1)拿出全部zip当我明白你只想要i。您需要将参数调整为substring()
  • 您使用sen.replace(word, "")将取代所有出现word。所以一旦你修复你的程序从zap中取出azappa将变成zpp(而不是zppa),并且azap将是zp。从String中删除一个特定的子字符串并不容易。我认为解决方案是使用StringBuilder类。它有一个delete方法,它将删除两个指定索引之间的部分,这就是你所需要的(呃,这是一个家庭作业,你不应该使用在课堂上没有学过的课程吗?)
  • 最后,您将更改的字符串分配给不同的变量idk,但您继续搜索sen。这就像依次分配zpzapityzoop,zipzpityzoopzipzapityzpidk,但从来没有zpzpityzp。但是,如果您按照我的建议使用StringBuilder,那么只需使用相同的StringBuilder即可,您将会很好。

希望它能让你走。

+0

ohhhh! omg你是一个拯救生命的人。非常感谢! –

相关问题