java:比较字符串

java:比较字符串

题目

编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且长度在100以内)。若s1和s2相等,输出0;若它们不相等,则指出其第一个不同字符的ASCII码的差值:如果s1>s2,则差值为正;如果s1<s2,则差值为负。
样例输入
java basic
样例输出
8

我的思路

首先要分两种情况
相等的情况
不相等的情况
相等的时候就是:长度相等,字符也对应
不相等的时候就是相等的对面,之后要判断第一个不同的字符之间的ASCII码的值,这个可以直接进行相减就行

介绍一个compareTo方法
String 对象调用compareTo(String s)方法,按照字典序与参数指定的String对象s的字符序列比较大小。如果当前String对象的字符序列与s相同,则该方法返回0,如果大于s的字符序列,该方法返回正值,如果小于s的字符序列,则返回负值。

还有一个方法
equals(Sting)方法
比较当前String对象的字符序列是否与参数s指定的String对象的字符序列相同

注意:public boolean equalsIgnore-Case(String s)比较当前String对象的字符序列与参数指定的String对象s的字符序列是否相同,比较时忽略大小写
而public int compareToIgnoreCase(String s)方法是忽略大小写的

注意:我忽略了一个问题,就是compareTo返回的是是否大小或等于0,但是题目要求我返回的是数值,所以还要进行编写

indexOf是进行索引,可以索引到位置,但是我并不知道他们什么时候不同啊。这个要怎么算

public char[] to CharArray():
将String 对象的字符系列的全部字符存放在一个字符数组中的方法

我写出来了
我这里是先判断如果两字符串相等了,这里直接用equals来进行判断,如果相等就输出0
后面的就是不相等,不相等首先要判断哪个长一点,如果s1长就进行对比的时候要长度要算到s1,也可以算到短的哪个加1,因为空出来的也要进行对比。之后再进行判断,这里的比较字符串是同位相比,不是像我之前的程序就是两个for循环,这里切记。之后就进行输出就可以了,这里我是直接把字符串直接转换为整数,最后如果判断了要记得break,要不然会一直循环

import java.util.Scanner;

public class 比较字符串 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		String s1=sc.next();//输入字符串s1
		String s2=sc.next();//输入字符串s2
		if(s1.equals(s2)){//当相等的时候
			System.out.println(0);
		}else{//当不相等的时候
			
				//如果s1的长度大于等于s2
				char [] a,b;//定义两个数组
				a=s1.toCharArray();//把s1,s2的字母存在数组里面保存
				b=s2.toCharArray();
				if(a.length>=b.length){//如果s1的长度大于等于s2时
				for(int i=0;i<s1.length();i++){//进行检索
					if(a[i]!=b[i]){
						int n=(int)(a[i]-b[i]);//输出结果
						System.out.print(n);
						break;
					}
				}
				}else{//如果s1字符串小于s2,
					for(int i=0;i<s2.length();i++){
						if(a[i]!=b[i]){
							int n=(int)(a[i]-b[i]);//输出结果
							System.out.print(n);
							break;
						}
					}
				}
		}
	}

}

在这里插入图片描述

他人的算法

我来讲一下其他博主的算法,他的主要步骤就是先进行长度判断,赋予同一个值,之后输出的时候分情况,之后比较,比较他是用的比较头字母,如果相等就移除,这样子是比我的算法可以少进行一个循环,到了最后就直接比了。但有个问题,如果他们前面的全部相等后面的就还是要比较啊,好像题目中说了不能是前缀,如果是这样,我的代码也可以直接比较长度较短的时候就行了。后面的就是输出了,也没有什么好讲的了

import java.util.Scanner;


public class 比较字符串 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		String s = sc.next();
		String ss = sc.next();
		char [] num1 = s.toCharArray();
		char [] num2 = ss.toCharArray();
		int a = 0;int temp=0;
		if(num1.length>num2.length){
			a=num2.length;
			temp=1;
		}
		else {
			a=num1.length;
			temp=2;
		}
		for (int i = 0; i < a; i++) {
			if(num1[0]!=num2[0]){
				int b = Math.abs(num1[0]-num2[0]);
				System.out.println(b);
				System.exit(0);
			}
		}
		if(temp==1){
			System.out.println(num1[a]);
		}
		else {
			System.out.println(num2[a]);
		}
		
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向上Claire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值