深入浅出 java.String

Java 处理字符串常用的一些方法

Java定义一个字符串

  1. 直接定字符串

    直接定义字符串表示直接使用“”来表示字符串中的内容

    String str = "Hello Mujey";
    
    String str;
    str = "Hello Mujey"

    对字符串的赋值操作可以在声明号String类型的句柄之后进行,但是在使用这个对象的之前必须进行赋值操作。

  2. 使用String类进行定义

    String类位于 java.lang包中,当我们创建一个java程序的时候,系统会自动帮我们引用java.lang.*所以我们可以直接使用,并不需要手动import

    String str = new String("Hello Mujey");
    String s = new String(str);

    注意: 当直接使用String(),括号里面不输入任何参数的时候,会创建一个空的字符串,并且赋值给句柄。

    String(),括号中还可以输入一个数组:

    char[] c = {'M','u','j','e','y'};
    String str = new String(c);
    System.out.println(str); // Mujey

    在String()的括号中放入一个数组的时候,实质上是对该数组进行了一个克隆操作, 所以在赋值完成之后再改变数组中元素的值并不会影响字符串中已经存储的值。

    char c = {'h','e','l','l','o'};
    String str = new String(c,0,3);
    System.out.println(str); // hel

    在括号中还可以传入两个integer类型的参数,用于表示截取从第几个元素到第几个元素,并将他们连成一个字符串。

String和Integer之间的转换

String转换为int

String类型转换为int类型主要有两种方式

  • Integer.parseInt(str)
  • Integer.valueOf(str).inValue()
String str = "333";
int i = 0; // 第一种方法
i = Integer.parseInt(str); // => int: 333
i = Integer.parseInt("345"); // => int: 345 i = 0;
// 第二种方法
i = Integer.valueOf(str).inValue(); // => int: 333
i = Integer.valueOf("345").inValue(); // => int: 345

Int转换为String

前几天在LeetCode做算法题的时候看到一个题目来和大家分享一下,这个题目非常的简单。给出一组数组,返回位数为偶数的个数例如:

输入:[345,365,343,53,43,2532]

返回:3

53和43是两位数,他们的位数是2;2532是一个四位数,它的位数是4。所以总共有3个偶数位数的数字。

这个题目最简单的解法就是将int类型的整数转换成一个字符串,然后通过字符串的长度来判断是奇数位数还是偶数位数。

 public int findNumbers(int[] nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
String s = String.valueOf(nums[i]);
if (s.length() % 2 == 0) {
result ++;
}
}
return result;
}

这是这道题的解法,怎么样,是不是非常的简单。但是其中就涉及到了int类型转换成String类型的操作。

int类型转换为String类型有3种方式:

  • String str = String.valueOf(int)
  • String str = Integer.toString(int)
  • String str = "" + i
int num = 30;

String str1 = String.valueOf(num); // String: "30"
String str2 = Integer.toString(num); // String: "30"
String str3 = "" + num; // String: "30"

这三种方式的转换结果都是一样的,但是博主推荐使用前面的两种方式来转换。最后一种虽然语法简介,但是它的短板就是执行的效率远远没有前面两种方式来的高。

第一种方式valueOf()中必须填入一个值,不然会有空指针异常产生。

获取字符串长度

细心的您肯定已经发现在上面的LeetCode算法题中,我还用到了s.length这个方法,这个方法的作用就是简单的获取字符串的长度。

在有些方面,字符串有点像一个char类型的数组,他们都可以使用.length来获取长度。但是稍有不同,字符串获取长度的.length()后面有一对小括号,说明这是一个方法,而char类型的数组,获取长度的方式则是获取这个数组的length属性,所以没有一对小括号

String str = "29493929134";
int i = str.length();
System.out.println(i); // 11

String类型的大小写转换

字符串类型的大小写转换只适用于英文,在中文中不可用,那也是理所当然的,因为中文没有大小写 (´▽`)

英文字符串的大小分别使用两个方法来完成:

  • 转换为小写: str.toLowerCase()
  • 转换为大写: str.toUpperCase()
String str = "abcd";
System.out.println(str.toUpperCase()); //:=> ABCD
System.out.println(str.toLowerCase()); //:=> abcd

去除字符串中的空格

如果一个字符串中的空格会对执行程序:例如判断等操作有所影响的时候,我们可以使用:

str.trim()这个方法来去除字符串中的空格:

String str = "Hello Java";
System.out.println(str.trim()); //:=>HelloJava

注意.trim()方法只能去除字符串中的半角空格,换句话来说中文状态下的全角空格,使用.trim()方法是无法去除的。

这种时候我们需要用到.replace()方法,将字符串中的全角空格转会成半角空格,然后用.trim()方法将它去除掉,.replace()方法在使用的时候需要两个参数,被替换的字符和替换它们的字符。

全角空格的unicode编码是12288,所以想讲全角空格替换为半角空格,就只需要

str.replace((char)12288, ' ');

截取和分割字符串

截取字符串

substring()方法可以用来截取字符串,这个方法最多可以传入两个参数,最少一个。

在传入一个参数的时候就表示从这个字符串的第几个字符开始截取到最后一个字符。

而当这个方法收到两个参数的时候,且第二个参数必须大于第一个参数,这个方法就会返回从第几个字符到第几个字符的字符串片段。

String str = "I like programming";
System.out.println(str.substring(2)); //:=>like programming
System.out.println(str.substring(1)); //:=> like programming
System.out.println(str.substring(2,5)); //:=>like

分割字符串

split()方法可以用来分隔字符串

split()方法可以穿出一个String类型的分割标志,这是必不可少的,.|这两个字符需要需要使用\\转义字符来进行转义,不然java是无法识别它们的

String str = "Java,Python,Go,C#,Swift,Ruby,PHP,Object-C";
String[] strs = str.split(",");
for (str : strs){ System.out.print(str + "\t"); }
// Java Python Go C# Swift Ruby PHP Object-C String frontEnd = "JavaScript|HTML5|CSS|jQuery|vue|React|Bootstrap";
String[] frontEnds = frontEnd.split("\\|"); // 使用转义字符\\
for (str : frontEnds){ System.out.print(str + "\t");}
// JavaScript HTML5 CSS jQuery vue React Bootstrap

在这个字符串类型的参数后面,还可以加上一个int类型的参数

String str = "Java,Python,Go,C#,Swift,Ruby,PHP,Object-C";
String[] strs = str.split(",", 4);
for (str : strs){ System.out.print(str + "\t"); }
// Java Python Go C#,Swift,Ruby,PHP,Object-C

深入浅出 java.String的更多相关文章

  1. 深入浅出Java 重定向和请求转发的区别

    深入浅出Java 重定向和请求转发的区别 <span style="font-family:FangSong_GB2312;font-size:18px;">impor ...

  2. 深入浅出Java动态代理

    文章首发于[博客园-陈树义],点击跳转到原文深入浅出Java动态代理 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位.代理 ...

  3. 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)

    在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...

  4. 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]

    本系列文章导航 深入浅出Java多线程(1)-方法 join 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) 深入浅出多线程(3)-Future异步模式以及在JDK1.5Concu ...

  5. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

  6. Java String.split()小点

    java String.split(); 别的不说,单说其中一个问题,这个函数去切分空字符串时,得到的结果: public static void main(String[] args) {// St ...

  7. Java总结篇系列:Java String

    String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...

  8. java String.split()函数的用法分析

    java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...

  9. java string类型的初始化

    以下基本上是java string类型最常用的三种方法 new string()就不介绍了  基本等同于第三种 String a;  申明一个string类型的 a,即没有在申请内存地址,更没有在内存 ...

随机推荐

  1. netty权威指南学习笔记一——NIO入门(4)AIO

    NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现.异步通道提供以下两种方式获取操作结果. 1.通过java.util.concurrent.Future 类来表示异步操 ...

  2. 第二阶段scrum-6

    1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 消息收发功能正在制作

  3. vue学习(九)对象变更检测注意事项

    Vue不能检测对象属性的添加和删除,要是必须这么做的话 需要使用 vue.$set() <body> <div id="app"> <h3> { ...

  4. HTML元素 和 CSS (9.23 第十天)

    HTML元素分类:块级元素和内联元素块级元素:标签元素会以新行开始或结束<h1><p><table>等内联元素:显示数据不会以新行开始<a><im ...

  5. POJ 2481:Cows 树状数组

    Cows Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 14906   Accepted: 4941 Description ...

  6. 解决CGrIdCtrl合并单元格后继续拆分后的问题

    DWORD dwMergeCellCount = vMergeCells.size(); ; i < dwMergeCellCount; i++){ m_HFlexGrid.SplitCells ...

  7. 面试官,不要再问我“Java虚拟机类加载机制”了(转载)

    关于Java虚拟机类加载机制往往有两方面的 面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断 ...

  8. cf442 B.Andrey and Problem

    看题偷瞄到题解2333(以为是劲题呢..结果是乱贪心,奇怪) 排序之后,如果加入下一个比现在更优就更新答案(奇怪啊) t=ans*(1-a[i])+s*a[i];(ans*(1-a[i])是新的一位不 ...

  9. python 奇淫技巧之自动登录 哔哩哔哩

    前言 嘿,各位小伙伴好呀,今天要带来点什么干货呢,就从我的实际开发中来给大家带来一个案例吧,如何自动登录 哔哩哔哩 接到老大通知,让我自动写一个自动登录 哔哩哔哩 的脚本,我当然是二话不说直接开怼,咱 ...

  10. HZNU-ACM寒假集训Day9小结 倍增

    LCA 倍增法求最近公共祖先 首先对于每个结点先进行dfs预处理它的深度,再记录下它们往父亲方向走2的0次,1次...k次步所到达的结点.在这里2的k次大于整棵树的最大深度. 预处理完后,需要查询两个 ...