我对编程完全陌生。你能给我一些关于如何改进我的代码的技巧吗?
问题是:
给定一个字符串数组,返回一个没有等于目标字符串的字符串的新数组。一种方法是计算目标字符串的出现次数,创建一个正确长度的新数组,然后复制正确的字符串。
我的代码:
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 我的代码似乎有点尴尬。是否有任何标准方法或一般方法来改进我的代码?
答案 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));