《Java核心技术·卷Ⅰ》学习记录(2020_1_11)

一、《Java核心技术》40~90页 第三章Java基本的程序设计结构看完

字符串的码点

Java的字符按照Unicode编码,分为常用字符和辅助字符。常用字符占用2个字节,一个代码单元;辅助字符需要用两个代码单元来表示。如果从字符串中自己拿字符,可能会只拿到辅助字符的一半,无法正确表示.

    String s = "\u0041\u00DF\u6771\ud801\uDC00";
    int n = s.codePointCount(0,s.length());
    int i = 0;
    int index = s.offsetByCodePoints(0, i);
    int cp = s.codePointAt(index);
	if(Character.isSupplementaryCodePoint(cp)){
        
    }

函数介绍:
    一般情况下,开始到结束范围都是包括开始,不包括结束。
    
    public int codePointCount(int beginIndex, int endIndex):返回字符串中从指定位置开始到结束的码点个数。
    
    public int offsetByCodePoints(int index, int codePointOffset):返回码点的索引,由字符串指定开始位置加上该位置的偏移量确定。
    
    public int codePointAt(int index):取字符串的码点。注意:此函数取得的是int型的码点,需要用转换成char型才可以字符。
    
    public static boolean isSupplementaryCodePoint(int codePoint) {
        return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT
            && codePoint <  MAX_CODE_POINT + 1;
    }
	没有找到准确的解释,据我理解,这个函数判断此码点是不是辅助字符的码点,如果是,需要连续使用        	 s.charAt(i++),s.charAt(i++),来取整个辅助字符;否则只需要一次s.charAt(i++)public static boolean isSurrogate(char ch) {
        return ch >= MIN_SURROGATE && ch < (MAX_SURROGATE + 1);
    }
	这个函数是从后往前遍历字符串时用到的,判断该字符是否是辅助字符的一部分。如果为真,需要i--两次。
文件的输入输出

​ 不太懂,不会用,后面学流的时候再仔细看。

控制流程

​ 和C基本一样,略

多维数组

​ Java中实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。

​ 所以可以方便的构造一个“不规则”数组,每一行有不同的长度。

二、LeetCode

有效的括号
public boolean isValid(String s) {
        if (s.isEmpty()) {
            return true;
        }
        int n = s.length();
        int i = 0;
        int j = 1;
        char[] stack = new char[n+1];
        stack[0] = ' ';
        stack[1] = ' ';
        for (; i < n; i++) {
            if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {
                stack[j++] = s.charAt(i);
            }
            if (s.charAt(i) == ')') {
                if (stack[j - 1] == '(') {
                    j--;
                } else {
                    return false;
                }
            }
            if (s.charAt(i) == '}') {
                if (stack[j - 1] == '{') {
                    j--;
                } else {
                    return false;
                }
            }
            if (s.charAt(i) == ']') {
                if (stack[j - 1] == '[') {
                    j--;
                } else {
                    return false;
                }
            }
        }
        if (j == 1) {
            return true;
        } else {
            return false;
        }
    }

使用栈来做。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值