2017-02-11 49 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你是一個拯救生命的人。非常感謝! –

相關問題