Java字符串相关

1、String类

1、方法

String trim() 返回字符串的副本,去掉前导空白和尾部空白字符。
String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串
String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

public String reverseWords(String s) {
        // 除去开头和末尾的空白字符
        s = s.trim();
        // 正则匹配连续的空白字符作为分隔符分割
        List<String> wordList = Arrays.asList(s.split("\\s+"));
        Collections.reverse(wordList);
        return String.join(" ", wordList);
    }

2、拓展

1、统计小写字符串字母个数

    /**
     * 小写字母统计个数,int[26]: 下标0-25表示a-z,[i]值为对应下标字母的个数
     * @param str 小写字母字符串
     * @return 记录小写字母出现个数的int数组
     */
    private int[] lowLetterCount(String str) {
        if (null == str || str.isEmpty()) {
            return null;
        }
        str = str.replaceAll(" +", "");//去掉空格,正则表达式" +"匹配一个或多个(+)空格
        int[] ints = new int[26];//小写字母、大写字母数字,下标代表字母,值为个数
        for (char c : str.toCharArray()) {
            ints[c - 'a'] += 1;
        }
        return ints;
    }

2、统计字母字符串字母个数

    /**
     * 字母统计个数,Map<Character, Integer> letterCountMap key为字母,value值为对应字母的个数
     * @param str 字母字符串
     * @return 记录字母出现次数的Map,key为字母,value为字母对应的次数
     */
    private Map<Character, Integer> letterCount(String str) {
        if (str == null || str.isEmpty()) {
            return null;
        }
        str = str.replaceAll(" +", "");//去掉空格,正则表达式" +"匹配一个或多个(+)空格
        Map<Character, Integer> letterCountMap = new HashMap<>(52);
        for (char c : str.toCharArray()) {
            if (letterCountMap.containsKey(c)) {
                letterCountMap.put(c, letterCountMap.get(c) + 1);
            } else {
                letterCountMap.put(c, 1);
            }
        }
        return letterCountMap;
    }

3、遍历一个String字符串的每一个字母

(1)str.charAt(int index)

String str = "asdfghjkl";
for (int i = 0; i < str.length(); i++) {
      char ch = str.charAt(i);
}

(2)使用String的toCharArray()方法转换为char[]数组,再遍历

char[] c = str.toCharArray();
for(char cc : c) {
  ...//cc直接用了
}

(3)使用String的substring(int begining, int end)截取第beginning个到end-1个子字符串

for(int i=0; i < str.length(); i++){
  String subStr = str.substring(i, i+1);
}

str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str;
str=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给str;

trim()是去掉字符序列左边和右边的空格,如字符串
str = " ai lafu yo ";
str = trim(str);
输出的将是"ai lafu yo"

4、字符串创建??

当相同的字符串常量(如:“abcd”)被多次创建时,只会保存字符串常量的一份副本,这称为“字符串驻留”。在Java中,所有编译时字符串常量都是驻留的。
因为 ==比较的是引用,所以相同内容字符串常量的==为true,因为驻留仅一份,引用相同。

String a = "abcd"; 

a作为一个变量会在栈内存中开辟空间用来保存该变量,首先检查字符串常量池中是否存在“abcd”,则直接将该变量指向该字符串常量;不存在则会新创建一个字符串常量到字符串常量池当中并将该变量指向该字符串常量

String b = new String("abcd"); 

首先b作为一个变量会在栈内存中开辟空间用来保存该变量,在运行期,new String("Hollis");执行到的时候,是要在 Java 堆中创建一个字符串对象的,而这个对象所对应的字符串字面量是保存在字符串常量池中的。但是,String s = new String("Hollis");,对象的符号引用 s 是保存在Java虚拟机栈上的,他保存的是堆中刚刚创建出来的的字符串对象的引用。

String c = new String("abcd").intern();

JVM 会查找常量池中是否有相同 Unicode 的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个 Unicode 等于 str 的字符串并返回它的引用。intern()有两个作用,第一个是将字符串字面量放入常量池(如果池没有的话,运行时?),第二个是返回这个常量的引用

如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;如果要保证线程安全,自然是StringBuffer。

5、Java中char 转化为int 的三种方法

如何把 char ‘9’ 转为 int 9, 不能直接转化,那样得到是‘9’的Ascii.
方法一: 先把char转为char[1]的数组,然后转为string,最后利用Integer中parserInt方法,此方法要创建多个对象,要消耗许多内存。
方法二: 利用char的封装类 character, 通过如下静态方法就可以直接实现。
方法三:先用if (Character.isDigit(c))判断c是不是数字,然后c-'0'得到数字

public static void main(String[] args) {
        char numChar = '9';
        int  intNum = (int)numChar;
        System.out.println(numChar + ": " + intNum);

        // method 1:
        char[] charArray = {numChar};
        intNum = Integer.parseInt(new String(charArray));
        System.out.println("method 1: " + numChar + ":" + intNum);

        // method 2:
        System.out.println("method 2: " + numChar + ":" + Character.getNumericValue(numChar));

        // method 3:
        if (Character.isDigit(numChar)) {
            intNum = numChar - '0';
            System.out.println("method 3: " + numChar + ":" + intNum);
        }
}
9: 57
method 1: 9:9
method 2: 9:9
method 3: 9:9

6、判断一个字符串中是否包含某字符

contains方法

java.lang.String.contains() 方法返回true,当且仅当此字符串包含指定的char值序列,即指定字符串,要用"XXX"
声明

public boolean contains(CharSequence s)

返回值
此方法返回true,如果此字符串包含,否则返回false。

public static void main(String[] args) {
        String str = "abc";
        boolean status = str.contains("a");
        if(status){
            System.out.println("包含");
        }else{
            System.out.println("不包含");
        }
    }

indexOf方法

java.lang.String.indexOf() 的用途是在一个字符串中寻找一个字的位置,同时也可以判断一个字符串中是否包含某个字符。
声明

int indexOf(int ch,int fromIndex)

返回值
indexOf的返回值为int,-1为不包含

    public static void main(String[] args) {
        String str1 = "abcdefg";
        int result1 = str1.indexOf("a");
        if(result1 != -1){
            System.out.println("字符串str中包含子串“a”"+result1);
        }else{
            System.out.println("字符串str中不包含子串“a”"+result1);
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 《Java从小白到大牛》纸质版已经上架了!!! 由字符组成的一串字符序列,称为“字符串”,在前面的章节中也多次用到...
    tony关东升阅读 851评论 0 2
  • package cn.itcast_01;/* 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 ...
    蛋炒饭_By阅读 622评论 0 0
  • 1.单行注释:“//”2.多行注释:“/ /” if条件语句 1. if(bloolean 表达式){pass;...
    再也不喊饿阅读 589评论 0 0
  • 前面我们总结了数组操作,这里我们将总结字符串相关的知识,除了总结String的API用法,同时我们还会总结一些相关...
    HCherisher阅读 3,653评论 2 6
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2