小白学 Java 之 String 字符串的使用

我们先从一个 代码 开始:

这是一道比较 版本号大小的编程题,leetcode  第 165 题,版本号的格式为

版本格式:主版本号.次版本号.修订号。

比较两个版本号 version1 和 version2。

如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。

你可以假设版本字符串非空,并且只包含数字和 . 字符。

 . 字符不代表小数点,而是用于分隔数字序列。

代码:看不懂循环,所以 用断点调试一步一步看运行结果,终于弄懂了!IDEA 中 用F9 继续执行,进入下一个断点。

package com.douyu;

/*

* 斗鱼直播面试:版本号比较大小

*/

public class versionCompare {

    public int compareversion(String version1, String version2){

        String[] nums1 = version1.split("\\.");

        String[] nums2 = version2.split("\\.");

        int n1 = nums1.length, n2 = nums2.length;

        // compare versions

        int i1, i2;

        for (int i = 0; i < Math.max(n1, n2); ++i) { //使用版本号最长的来进行遍历

            i1 = i < n1 ? Integer.parseInt(nums1[i]) : 0; // 遍历完版本号了吗? 没有,

                                                          // 将 版本号中的元素转换了int 给 i1 来比较大小/ 没有元素了则添加为0进行比较

            i2 = i < n2 ? Integer.parseInt(nums2[i]) : 0;

            if (i1 != i2) {

                return i1 > i2 ? 1 : -1;

            }

        }

        // the versions are equal

        return 0;

    }

    public static void main(String[] args){

        String version1 = "1.";

        String version2 = "1.04";

        versionCompare cp = new versionCompare();

        int result = cp.compareversion(version1,version2);

        System.out.println(result);

    }

}

解题思路:官方版本

分割+解析,两次遍历,线性空间。

第一个想法是将两个字符串按点字符分割成块,然后逐个比较这些块。

如果两个版本号的块数相同,则可以有效工作。如果不同,则需要在较短字符串末尾补充相应的.0块数使得块数相同。

算法:

(1)根据点分割两个字符串将分割的结果存储到数组中。

(2)遍历较长数组并逐个比较块。如果其中一个数组结束了,实际上可以根据需要添加尽可能多的零,以继续与较长的数组进行比较。

A. 如果两个版本号不同,则返回 1 或 -1。

(3)版本号相同,返回 0。


这里是讲字符串的使用的,进入正题:

首先,String 类型的字符串是不可以改变的,那么我如何进行取出一个个版本号比较大小呢?

答案是:把 String 类型的字符串变成 字符串数组。

方法:

char[] ss=s.toCharArray();//s为要转化的字符串

String[] arr = str.split(","); // 用,分割

注意: . 、 | 和 * 等转义字符,必须得加 \\。多个分隔符,可以用 | 作为连字符。

比如我们代码中的 String[] nums1 = version1.split("\\.");  就是这个意思!

关于字符窜 String 本身,常见的一些方法:

 length() 方法,它返回字符串对象包含的字符数

使用'+'操作符来连接字符串

charAt(index),返回指定索引处的 char 值。

compareToIgnoreCase() 方法用于按字典顺序比较两个字符串,不考虑大小写

补充:返回值是整数,如果参数字符串等于此字符串,则返回值 0;如果此字符串小于字符串参数,则返回一个小于 0 的值;如果此字符串大于字符串参数,则返回一个大于 0 的值。

equals() 方法用于将字符串与指定的对象比较:Str1.equals( Str2 )

split() 方法根据匹配给定的正则表达式来拆分字符串。

注意: . 、 $、 | 和 * 等转义字符,必须得加 \\。

注意:多个分隔符,可以用 | 作为连字符。

trim() 方法用于删除字符串的头尾空白符。


参考:

Java 字符串转化为字符数组,字符数组转化为字符串_AlbenXie的博客-CSDN博客_将字符串转化为字符数组

Java String 类 | 菜鸟教程

你可能感兴趣的:(小白学 Java 之 String 字符串的使用)