- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 String 有一个方法可以让我比较两个字符串,称为compareTo。我试图编写此方法的修改版本。我的问题是,当发现两个字符之间存在差异时,我的方法就会停止。例如:
public static int stringCompare(String s1, String s2) {
int i = 0, n1, n2;
while(true) {
if (s1.length() <= i && s2.length() <= i) {
return 0;
} else if (s1.length() <= i) {
return -s2.charAt(i);
} else if (s2.length() <= i) {
return s1.charAt(i);
} else {
n1 = s1.charAt(i);
n2 = s2.charAt(i);
if (n1 != n2) {
i++;
return n1 - n2;
} else {
i++;
}
}
}
}
我的主要内容如下:
public static void main(String[] args) {
String str1 = "AB";
String str2 = "AA";
System.out.print(stringCompare(str1, str2));
}
比较结果为 1,因为字符 'B' 在字符集中等于 66,而 'A' 等于 65 -> 66 - 65 = 1。这意味着字符串 str1 大于 str2。
如果我更改字符串并向它们都添加一个字符,则不会比较字符索引 1 之后的剩余字符(在本例中为“A”和“B”)。
这是更新后的 main,它将给出与之前相同的结果。
public static void main(String[] args) {
String str1 = "ABA";
String str2 = "AAB";
System.out.print(stringCompare(str1, str2));
}
即使两个字符串的值都等于 0 ((65 + 66 + 65) - (65 + 65 + 66)),结果也是 1,因为字符串索引 2 处的字符('A' 和 'B' )不会进行比较。
字符串的实例方法给了我相同的结果。即使我使用 str.compareTo(str) 方法,比较的值也是 1。
谁能解释一下如何修改我的函数,以便将其他字符包含在比较中?
谢谢。
最佳答案
问题是一旦发现差异,您就会返回
if(n1 != n2)
{
i++;
return n1 - n2;
}
相反,为了继续计算,您需要一个 sum 变量
int sum = 0; //at the start of the method
[...]
if(n1 != n2)
{
i++;
sum += n1 - n2;
}
[...]
return sum; //at the end of the method
这可以做得更干净一点
int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length() && i < b.length(); i++)
sum += a.charAt(i) - b.charAt(i);
return sum;
}
如果考虑到所有字符,您可以在之后循环多余的字符
int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length() && i < b.length(); i++)
sum += a.charAt(i) - b.charAt(i);
for(int i = b.length(); i < a.length(); i++)
sum += a.charAt(i);
for(int i = a.length(); i < b.length(); i++)
sum -= b.charAt(i);
return sum;
}
或者求和并减去
int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length(); i++)
sum += a.charAt(i);
for(int i = 0; i < b.length(); i++)
sum -= b.charAt(i);
return sum;
}
关于Java String.compareTo - 即使字符最初具有不同的值,也继续比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47351803/
我有一个使用 Sinch SDK 和 CallKit 实现的 VOIP 应用程序。一切正常,除了设备插入耳机时。在后一种情况下,当通话开始时,音频仍通过设备的主扬声器路由。如果我在通话期间拔下并重
我需要将大量复杂(20 多个属性)对象过滤成多个子列表。要创建子列表,我有一个过滤器规范列表。要求是:a) 不允许一个项目成为两个子列表的一部分,并且 b) 必须能够在处理完成后获取所有未分割的项目。
我有一个简单的 .share-toggle 切换链接。当您点击它时,Facebook 评论插件应该会显示。它最初应该被 Conceal 问题是,如果我使用 css Conceal 它,然后单击切换按钮
我正在尝试制作一个功能类似于 android 市场的图库,您可以在其中滚动(左/右)以查看免费或付费应用程序等...还可以在布局中上下滚动。 到目前为止,我只是让它加载了两个布局,它们都有一个简单的“
大家好,我是网络开发的新手,最近刚刚完成我对网络设计的第一次尝试。我偶然发现了一个我找不到解决方案的问题。在 webkit-browsers 中,我的一个 ul-lists(导航)最初呈现在错误的位置
我遇到了这个问题。我在 ISP 上使用 Umbraco CMS 启动了一个 ASP.NET 网站。(这只是一个非常基本的信息网站。没什么特别的。) 但是,当我想要访问该网站时,第一个页面加载需要很长时
在我的 iPhone 应用程序中,我使用 UITabBarController 布置了三个选项卡。第一个选项卡(在应用启动时加载)使用本地数据加载,速度非常快。 虽然第二个选项卡从网络下载 XML 文
我有这样的风格: #cytoscape-container { width: 100%; height: 100%; margin: 0 aut
我在这里看到了几篇关于 SO 的帖子,但它们在功能和结构上过于具体,而我正在寻找的是我或任何人都可以在任何地方使用的更通用的东西。 我只需要有一个按钮,单击该按钮可以在 3 类之间循环。但如果出现必须
我在 http://www.raven.dima.neoturbine.net/ 有一个网页我正在努力。顶部导航在 IE 8、Firefox 3.6 和适用于 Android 的 Dolphin 浏览
我想将主机的用户/组与 docker 机器同步,以使(开发人员)能够编辑容器内部或外部的文件。有一些这样的想法:Handling Permissions with Docker Volumes这会创建
向通知列表/栏发布推送通知时,.contentText 和 .number 最初不显示(.ticker、.icon 和 .contentTitle 显示正常)。但是,在发布另一个通知(具有不同的 ID
我实现了以下 MKMapView 方法,该方法在添加注释后运行。我在 Interface Builder 中将我的 MKMapView map (parishMap) 设置为“显示用户位置”,并且在加
我是一名优秀的程序员,十分优秀!