如何比较两个字符串

hnnxzhoujia 2008-10-22 01:06:46
String str = 杭州湖州嘉兴宁波丽水金华.......
Strubg str2 = 台州;丽水;杭州;........

str是固定的, 如何判断str2中的地市在str中存在,必须要全部存在,程序才往下走,如果str2中出现了一个或多个地市,在str中找不到,那么程序返回。请问改怎么写。
...全文
240 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leonhe2022 2008-10-22
  • 打赏
  • 举报
回复


String str = "杭州湖州嘉兴宁波丽水金华";
String str2 = "台州;丽水;杭州;";
//分解成数组
String[] cities = str2.split(";");
//遍历数组
for (String string : cities) {
if (str.indexOf(string) == -1) {
break;
}
}


java__king 2008-10-22
  • 打赏
  • 举报
回复
好多人回答.
showde123 2008-10-22
  • 打赏
  • 举报
回复
莫非算是 信息检索里的基本算法?
East271536394 2008-10-22
  • 打赏
  • 举报
回复
引用 12 楼 hnnxzhoujia 的回复:
按一楼思想写的代码是有问题的啊
列如 str1 = "杭州湖州嘉兴宁波丽水金华";当我str2传入的是 丽水;杭州,用str1.indexOf(arr[i]) == -1 去判断,程序显然会绕过去,会认为不包含,实际这种情况是包含的。当我执行多选就会存在问题的,这样写不行

1楼的去掉空格就可以了
if (str1.indexOf(arr[i].trim()) == -1)
不过15楼的说的真是个问题
你再想想,为啥非要这样设计?!
NS21113513 2008-10-22
  • 打赏
  • 举报
回复
abcdef.indexof(a)
时光瞄 2008-10-22
  • 打赏
  • 举报
回复
6楼提出的问题是个问题啊。。。
jcyan 2008-10-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hnnxzhoujia 的回复:]
按一楼思想写的代码是有问题的啊
列如 str1 = "杭州湖州嘉兴宁波丽水金华";当我str2传入的是 丽水;杭州,用str1.indexOf(arr[i]) == -1 去判断,程序显然会绕过去,会认为不包含,实际这种情况是包含的。当我执行多选就会存在问题的,这样写不行
[/Quote]
1楼的去掉空格就可以了
if (str1.indexOf(arr[i].trim()) == -1)
不过15楼的说的真是个问题
你再想想,为啥非要这样设计?!
chudu 2008-10-22
  • 打赏
  • 举报
回复
这个问题不好解决,例子:
str1="黑龙江宁夏";
而str2="江宁";
这种情况怎么办,很明显str1中是想说只有"黑龙江","宁夏"两个地名,所以str2"江宁"应该不包含在其中,但是如果只接用上面所说的indexOf()还是contains(),程序都认为str2中"江宁"是包含在str1="黑龙江宁夏"中的,而这并不是我们想要的
怎样才能区分开这个问题呢?我觉得str1也要用什么分割下.
j_zx2004 2008-10-22
  • 打赏
  • 举报
回复
public class compare{
public static void main(String[] args) {
String str1 = "杭州湖州嘉兴宁波丽水金华";
String str2 = "台州;丽水;杭州;...";
boolean flag = true;
String[] arr = str2.split(";");
for (int i = 0; i < arr.length;i++) {
if (str1.indexOf(arr[i]) == -1) {//错了不好意思应该是这个才对
flag = false;
break;
}
}

if (flag == false) {
System.out.println("城市不存在!");
System.exit(-1);//结束程序
}

System.out.println("str2中的城市在str1都存在");
//继续进行
}
}

a03180204 2008-10-22
  • 打赏
  • 举报
回复
方法可行,鉴定完毕
ZXEOC 2008-10-22
  • 打赏
  • 举报
回复
楼主,你最好把str1也用分号分开,不然还是容易出问题比如str1里有“上海南昌”,str2里有“海南”,那这算不算通过?
另外,你说只要有一个不通过就立即返回,那只要把10楼代码里的flag=false那行改成return就行了吧
hnnxzhoujia 2008-10-22
  • 打赏
  • 举报
回复
再比如我传入台州,杭州。str1中存在杭州,但不存在台州
台州没有去执行,但杭州去执行了啊。而我要求只要出现了str1中不存在的地市,立即返回。
hnnxzhoujia 2008-10-22
  • 打赏
  • 举报
回复
因为我丽水,杭州,都存在于str1中
hnnxzhoujia 2008-10-22
  • 打赏
  • 举报
回复
按一楼思想写的代码是有问题的啊
列如 str1 = "杭州湖州嘉兴宁波丽水金华";当我str2传入的是 丽水;杭州,用str1.indexOf(arr[i]) == -1 去判断,程序显然会绕过去,会认为不包含,实际这种情况是包含的。当我执行多选就会存在问题的,这样写不行
ZXEOC 2008-10-22
  • 打赏
  • 举报
回复
split倒是可以解决问题,不过,楼主,你干嘛非得要把城市名凑成一个String,放在list里遍历不是挺好的么,难道是为了传输或者存储的时候节约资源?
shuaiAWP 2008-10-22
  • 打赏
  • 举报
回复

public class compare{
public static void main(String[] args) {
String str1 = "杭州湖州嘉兴宁波丽水金华";
String str2 = "台州;丽水;杭州";
boolean flag = true;
String[] arr = str2.split(";");
for (int i = 0; i < arr.length;i++) {
if (str1.indexOf(arr[i]) == -1) {//错了不好意思应该是这个才对
flag = false;
break;
}
}

if (flag == false) {
System.out.println("城市不存在!");
System.exit(-1);
}

System.out.println("str2中的城市在str1都存在");
//继续进行
}
}


真失败
lihan6415151528 2008-10-22
  • 打赏
  • 举报
回复
楼主以前帖子里面

str2没有分号
justinavril 2008-10-22
  • 打赏
  • 举报
回复
按一楼的主意挺好


不过你以前的帖子里 我看出来了 你得到str2是把一个城市一个城市连接成一个字符串的 是吧?你完全不用把他们连结成一个字符串 你就循环 然后一个城市一个城市的去匹配 省了字符串连接和分割 不知道你明白我的意思没
shuaiAWP 2008-10-22
  • 打赏
  • 举报
回复

public class compare{
public static void main(String[] args) {
String str1 = "杭州湖州嘉兴宁波丽水金华";
String str2 = "台州;丽水;杭州";
boolean flag = true;
String[] arr = str2.split(";");
for (int i = 0; i < arr.length;i++) {
if (str1.indexOf(arr[i]) != -1) {
flag = false;
break;
}
}

if (flag == false) {
System.out.println("城市不存在!");
System.exit(-1);
}

System.out.println("str2中的城市在str1都存在");
//继续进行
}
}

一根黑毛 2008-10-22
  • 打赏
  • 举报
回复
我觉得有点难度,第一个字符串中没有分隔符,万一字符串一中有 丰台州水 这样的怎么办,台州到底算不算在字符串一中
加载更多回复(5)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧