代码改进,字符串数组

时间:2016-04-21 12:22:05

标签: java arrays

我对编程完全陌生。你能给我一些关于如何改进我的代码的技巧吗? 问题是:
给定一个字符串数组,返回一个没有等于目标字符串的字符串的新数组。一种方法是计算目标字符串的出现次数,创建一个正确长度的新数组,然后复制正确的字符串。
我的代码:

public String[] wordsWithout(String[] words, String target) {
  int numberOfTargets = 0;

  for (int i = 0; i < words.length; i++){
    if ( words[i].equals(target) ) numberOfTargets++;
  }

  String[] result = new String[words.length - numberOfTargets];

  for (int i = 0; i < words.length - numberOfTargets; i++){ // 1
    result[i] = "0";                                        // 1 
  }                                                         // 1 

  for (int i = 0; i < words.length; i++){
    if ( !words[i].equals(target) ){
      int j = 0;                         // 2   
      while ( !result[j].equals("0") ){  // 2
        j++;                             // 2 
      }                                  // 2
      result[j] = words[i];
    } 
  }
  return result;
}

代码如何工作的示例:

wordsWithout(["aa", "ab", "ac", "aa"], "aa") → ["ab", "ac"]

我知道新的int数组由零dy默认填充。新的字符串数组怎么样?我不得不人为地用零填充它,部分标记为// 1,这样我就可以滚动&#34;到了正确的元素,当我必须在我的新数组中添加元素时,标记为// 2 我的代码似乎有点尴尬。是否有任何标准方法或一般方法来改进我的代码?

4 个答案:

答案 0 :(得分:0)

您不需要将每个元素设置为public void Configuration(IAppBuilder app) { // Configure Autofac var container = ConfigureAutofac(app); // Configure CORS ConfigureCors(app); // Configure Auth ConfigureAuth(app, container); // Configure Web Api ConfigureWebApi(app, container); }

这样做:

"0"

答案 1 :(得分:0)

通过使用ArrayList看起来您的代码可以简化很多。

public String[] wordsWithout(String[] words, String target)
{
    ArrayList<String> list = new ArrayList<String>();
    for(int i = 0; i < words.length; ++i)
    {
        if(!words[i].equals(target))
        {
            list.add(words[i]);
        }
    }
    return list.toArray(new String[0]);
}

基本上不是计算目标数组的大小并初始化它,而是使用一个列表(大小可变),放入你需要的所有元素,然后创建一个新数组从它。

与此无关,请不要创建自己的值("0")来描述空值 - 这里有一个专门的关键字null

答案 2 :(得分:0)

使用

for (String s : words) {

   if (s.equals(target))
   numberOfTargets++;
}

答案 3 :(得分:0)

这可能会更简单。使用分割字符串方法可以创建一个数组,每个值都用空格分隔。

const validEmail = 'something@something.com';
const invalidEmail = 'someth..ing@something.com';
var reg = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i;

console.log(validEmail+' : ' + reg.test(validEmail));
console.log(invalidEmail+' : ' + reg.test(invalidEmail));