compareto方法的详细介绍+求字符串索引

1.题目描述

有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,

  • 找出给定字符串(肯定不是空字符串)的索引。

2. 代码实现

public class Demo1 {
	public static void main(String[] args) {
		String[] arr = { "a", "", "ac", "", "ad", "b", "", "ba" };
		int res = indexOf(arr, "abc");
		System.out.println(res);
	}

	private static int indexOf(String[] arr, String p) {
		int begin = 0;
		int end = arr.length - 1;
		while (begin <= end) {
			int indexOfMid = begin + ((end - begin) >> 1);
			while (arr[indexOfMid].equals("")) {
				indexOfMid++;
				// 千万要注意
				if (indexOfMid > end) {
					return -1;
				}
			}

			if (arr[indexOfMid].compareTo(p) > 0) {
				end = indexOfMid - 1;
			} else if (arr[indexOfMid].compareTo(p) < 0) {
				begin = indexOfMid + 1;
			} else {
				return indexOfMid;
			}
		}
		return -1;
	}
}

3.java中的compareto方法的详细介绍

  1. 返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值
String a1 = "a";
String a2 = "c";        
System.out.println(a1.compareTo(a2));//结果为-2
  1. 即参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值
String a1 = "aa";
String a2 = "ad";        
System.out.println(a1.compareTo(a2));//结果为-3
  1. 如果两个字符串不一样长,并且可以参与比较的字符又完全一样,则返回两个字符串的长度差值
String a1 = "aa";
String a2 = "aa12345678";        
System.out.println(a1.compareTo(a2));//结果为-8

注意:参与比较的字符如果不完全一样,数量一样的字符串

String a1 = "aa";
String a2 = "ad12345678";        
System.out.println(a1.compareTo(a2));//结果为-3
  1. 返回为正数表示a1>a2, 返回为负数表示a1<a2, 返回为0表示a1==a2
  2. 数字类型不能用compareTo,nt跟int的比较不能用compareTo方法,直接用大于(>) 小于(<) 或者 等于(==) 不等于(!=)来比较即可
int num1 = 4;
int num2 = 5;        
num1.compareTo(num2);//Cannot invoke compareTo(int) on the primitive type int 

可以先转为字符串类型在进行比较,直接+双引号就可以转为字符串

  1. compareToIgnoreCase忽略大小写
  2. int型可以直接比较,所以没有用到compareTo比较,如果声明的是Date、String、Integer、或者其他的,可以直接使用compareTo比较,
Integer n1 = 5;
Integer n2 = 6;
System.out.println(n1.compareTo(n2));//-1 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sparky*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值