【问题标题】:Java: Finding part of a string in a String Array and making a new arrayJava:在字符串数组中查找字符串的一部分并创建一个新数组
【发布时间】:2010-12-28 21:06:44
【问题描述】:

我在一个数组中有一个列表,每个条目在单词前面包含 o: 或 g:,例如 o:word 或 g:word。我想要 2 个函数,一个只用 g:'s 创建一个数组,一个只用 o:'s 创建一个数组

我还希望从结果中删除 g:'s 和 o:'s。我不确定如何做到这一点而不会导致数组越界错误等,所以我想知道是否有人可以给我一个例子。

【问题讨论】:

  • 把初始数组搞乱可以吗?
  • 任何时候你发现自己想知道如何在不导致数组越界错误的情况下做某事,想想 ArrayList。 :)

标签: java arrays function


【解决方案1】:

闻起来像作业。

String[] array = ...

ArrayList<String> gList = new ArrayList<String>();

ArrayList<String> oList = new ArrayList<String>();

for (String word : array) {  
    if (word != null)) {  
        if (word.startsWith("g:"))   
            gList.add(word.subString(2));  
        else if (word.startsWith("o:")
            oList.add(word.subString(2));  
    } 
}

【讨论】:

  • 这不是家庭作业,但谢谢。不完全是我想要的,但我修改了它以供我使用。
【解决方案2】:

一种方法是使用ArrayLists 创建新列表。如果在获得两个新列表后需要原始数组,只需在它们上使用toArray()

【讨论】:

    【解决方案3】:

    您最好使用 ArrayLists(而不是数组),因为您事先不知道结果的大小。但是您可以进行两次传递,一次计算带有感兴趣前缀的行,第二次填充新数组。

    int n = 0;
    for (int i = 0; i < array.size; i++)
      if (array[i].startsWith(prefix))
        n++;
    
    String[] result = new String[n];
    int j = 0;
    
    for (int i = 0; i < array.size; i++)
      if (array[i].startsWith(prefix))
        result[j++] = array[i].substring(prefix.length());
    

    没有尝试过,但我认为应该可以完成这项工作。

    【讨论】:

    【解决方案4】:

    假设你可以弄乱原始数组,并且不需要保留顺序,这应该很快:

    String[] array = {"o:1","o:2","g:10","o:3","g:20","o:4","g:30","g:40","o:5"};
    int low = 0;
    int high = array.length - 1;
    while(low <= high) {
        if(array[low].startsWith("g:")) {
            array[low] = array[low].substring(2);
            low ++;
        } else if (array[high].startsWith("o:")) {
            array[high] = array[high].substring(2);
            high --;
        } else {
            String temp = array[low].substring(2);
            array[low] = array[high].substring(2);
            array[high] = temp;
            low++;
            high--;
        }
    }
    String[] gs = new String[low];
    System.arraycopy(array, 0, gs, 0, low);
    String[] os = new String[array.length - low];
    System.arraycopy(array, low, os, 0, array.length - low);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 2020-06-19
      • 2012-12-31
      相关资源
      最近更新 更多