Java ';占位符';避免正面比较的性格?
我正在处理这个问题。我遇到了以下问题: 给定两个长度相同且包含字符串的数组,将一个数组中的第一个字符串与另一个数组中的第一个字符串进行比较,将第二个字符串与第二个字符串进行比较,依此类推。计算两个字符串非空且以相同字符开头的次数。字符串可以是任何长度,包括0 我的代码是:Java ';占位符';避免正面比较的性格?,java,arrays,string,compare,Java,Arrays,String,Compare,我正在处理这个问题。我遇到了以下问题: 给定两个长度相同且包含字符串的数组,将一个数组中的第一个字符串与另一个数组中的第一个字符串进行比较,将第二个字符串与第二个字符串进行比较,依此类推。计算两个字符串非空且以相同字符开头的次数。字符串可以是任何长度,包括0 我的代码是: public int matchUp(String[] a, String[] b){ int count = 0; for (int i = 0; i < a.length; i++) {
public int matchUp(String[] a, String[] b){
int count = 0;
for (int i = 0; i < a.length; i++) {
String firstLetterA = a[i].length() == 0
? "ê"
: a[i].substring(0, 1);
String firstLetterB = b[i].length() == 0
? "é"
: b[i].substring(0, 1);
if (firstLetterA.equals(firstLetterB)) {
count++;
}
}
return count;
}
public int匹配(字符串[]a,字符串[]b){
整数计数=0;
for(int i=0;i
我的问题是:使用哪个“占位符”字符可以避免在firstLetterA
和firstLetterB
之间进行不必要的比较
在本例中,我只分配了两个很少使用的不同字母(至少在英语中)。我试着只使用
”
(一个空字符,不是空格),但当然,它们彼此匹配。我还尝试对这两种情况都使用null
,因为我假设它不能进行正比较,但这也会导致问题。一个好的实践-IMO-是扩展if
条件,并且根本不使用任何伪字符:
for (int i = 0; i < a.length; i++) {
if (!a[i].isEmpty() && !b[i].isEmpty() && a[i].charAt(0) == b[i].charAt(0)) {
count++;
}
}
for(int i=0;i
这是另一种解决方案
- 迭代每个数组的嵌套二维循环
- 检查两个数组中的字符是否相同,顺序和 弦长
- 通过子字符串方法比较字符
- 增加计数
public static int matchingChar(字符串[]a,字符串[]b){
整数计数=0;
对于(int i=0;i公共int匹配(字符串[]a,字符串[]b){
整数计数=0;
对于(int i=0;i为什么要/需要占位符?为什么不在有占位符时只比较第一个字符,而在字符串长度为零时执行另一个操作?可以使用charAt()
而不是substring()
,因此它不会每次都创建一个新的字符串。重要提示:如果使用重音字符等,这和已接受的答案不一定能正常工作,因为字符串之间的组合可能不同。这可能是也可能不是理想的行为。
public static int matchingChar(String[] a, String[] b) {
int count=0;
for(int i=0;i<a.length;i++) {
for(int j=0;j<b.length;j++) {
if(i==j && a[i].length()!=0 && b[i].length()!=0) {
if(a[i].startsWith(b[i].substring(0,1))) {
count++;
}
}
}
}
return count;
}
public int matchUp(String[] a, String[] b) {
int count = 0;
for(int i=0;i<a.length;i++)
{
if(a[i].equals("") || b[i].equals(""))
continue;
if(a[i].charAt(0) == b[i].charAt(0))
count++;
}
return count;
}