2013-02-01 125 views
-2

我怎么拆ArrayList的字符串 功课 阳台 坚持 硝石 BOLTON 俗气 CLIENTELE分裂ArrayList的字符串

我想要拆分那些话为 “SCH”, “OOL”, “WO”,“ RK”。

这里是我的代码

import java.io.File; 
import java.util.ArrayList; 

public class HW2 { 

    public static ArrayList<String> getTiles(ArrayList<String> input_list_of_strings) { 
     // create a substring by go through the loop first, then .... (instruction) 
     Object[] subString = new Object[input_list_of_strings.size()]; 
     for (int i = 0; i < input_list_of_strings.size(); i++) { 
      subString[i] = input_list_of_strings.get(i); 
      // test just want to see if subString get all String 
//   System.out.println(subString[i]); 

      String delim=" "; 
      String[] splitstrings = ((String) subString[i]).split(delim); 
      for (int j = 0; j < splitstrings.length; j++) { 
       splitstrings[j] +=delim; 
       System.out.println(splitstrings[j]); 
      } 
     } 
     return input_list_of_strings;  
     } 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     ArrayList<String> input_words = new ArrayList<String>(); 
     input_words.add("SCHOOLWORK"); 
     input_words.add("BALCONY"); 
     input_words.add("INSIST"); 
     input_words.add("SALTPETER"); 
     input_words.add("BOLTON"); 
     input_words.add("KITSCHY"); 
     input_words.add("CLIENTELE"); 
     System.out.print(getTiles(input_words));  
    } 

} 

谢谢......通过你的ArrayList<String>

+5

什么是你的问题?问题是什么?分割字符串的确切标准是什么? –

+0

什么应该是确切的标准来分割一个字符串? – Krease

+1

如何分开单词,决定性因素是什么?真的没有任何直觉的方式让我知道你想让'SCHOOLWORK'分裂为'SCH','OOL','WO','RK'而不是'SCHOOL','WORK'。你能解释一下它背后的驱动逻辑吗? – Grambot

回答

0

我会使用一个接口来封装你想要如何拆分每个字符串。

public static interface StringSplitter { 
    public List<String> splitString(String s); 
} 

那么你的“getTiles”的方法,简直是:

public static ArrayList<String> getTiles(ArrayList<String> input,StringSplitter splitter) { 

    int initSize = input.size(); 
    for(int i = 0; i < initSize; i++) { 

     String source = input.remove(0); //Remove from head 
     input.addAll(splitter.splitString(source)); //Add to end 

    } 

    return input; 

} 

注:此方法会修改原始列表,它可以很容易地适应于简单地复制列表如果需要的话。尽管如此,我更喜欢这种方式。由于分割这些单词的确切过程尚不清楚,因此我猜测您希望继续将单词分成三个字符,除非该单词只会留下一个字符,然后再以两个字符分隔 - 否则不会分裂。所以你默认的 'StringSplitter' 将是:然后

public static final StringSplitter DEFAULT_SPLITTER = new StringSplitter() { 

    @Override 
    public List<String> splitString(String s) { 
     List<String> subs = new ArrayList(); 
     while(!s.isEmpty()){ 
      int splitsize = 0; 
      if(s.length() < 5) { 
       if(s.length() == 4) { 
        splitsize = 2; 
       } else { 
        splitsize = s.length(); 
       } 
      } else { 
       splitsize = 3; 
      } 
      subs.add(s.substring(0,splitsize)); 
      s = s.substring(splitsize); 
     } 
     return subs; 
    } 


}; 

你的主要方法是:

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    ArrayList<String> input_words = new ArrayList<String>(); 
    input_words.add("SCHOOLWORK"); 
    input_words.add("BALCONY"); 
    input_words.add("INSIST"); 
    input_words.add("SALTPETER"); 
    input_words.add("BOLTON"); 
    input_words.add("KITSCHY"); 
    input_words.add("CLIENTELE"); 
    System.out.print(getTiles(input_words),DEFAULT_SPLITTER); //Make sure to use DEFAULT_SPLITTER 
} 
+0

谢谢,这会有很大的帮助。 –

+0

System.out.print(getTiles(input_words),DEFAULT_SPLITTER); //在getTiles(input_words)处发生错误,并且它说:类型HW2中的方法getTiles(ArrayList ,HW2.StringSplitter)不适用于参数(ArrayList )。我试图修复它,但它对我不起作用。 –

+0

您将需要确保'getTiles'接受ArrayList 和'StringSplitter'像上面的例子。由于这是功课,我不确定我是多么渴望帮助... – souldzin

0

首先迭代。对于ArrayList中的每个单词,将其分割为块。上面的例子没有多大意义 - 为什么“SCHOOLWORK”分成“SCH”,“OOL”,“WO”,“RK”而不是“SCHOOL”和“WORK”?如果不了解您的要求背后的逻辑,我们只能提供一般性建议。

因此,基本上:

// iterate through the arraylist 
ArrayList<String> allWords; // instantiate this 
... 
for(String word : allWords) { 
    splitWord(word); 
} 

,并创建一个方法splitWord(String)适用需要aginst字的任何逻辑将其分开。如果您需要特定大小的文字,建议您查看字符串的substring()方法。