面试官Q1:请问String常见的方法有哪些,列举几个?

String是我们开发中使用频率最高的类,它有哪些方法,大家一定不会陌生,例如:

  • length();//计算字符串的长度

  • charAt();//截取一个字符

  • getChars();//截取多个字符

  • equals();//比较两个字符串

  • equalsIgnoreCase();//比较两个字符串,忽略大小写

  • startsWith();//startsWith()方法决定是否以特定字符串开始

  • endWith();//方法决定是否以特定字符串结束

  • indexOf();//查找字符或者子串第一次出现的地方。

  • lastIndexOf();//查找字符或者子串是后一次出现的地方。

  • substring();//截取字符串

  • concat();//连接两个字符串

  • replace();//替换

  • trim();//去掉起始和结尾的空格

  • valueOf();//转换为字符串

  • toLowerCase();//转换为小写

  • toUpperCase();// 转换为大写

但是像replace(),substring(),toLowerCase()这三个方法需要注意一下,我们看下下面一段代码:

import java.util.*;
public class StringTest {
public static void main(String[] args){
String ss = "123456";
System.out.println("ss = " + ss);
ss.replace('1', '0');
System.out.println("ss = " + ss);
}
}

打印结果:

ss = 123456
ss = 123456

如果你不了解replace方法的源码,可能会认为最后的打印结果为 "ss = 023456",但是实际上方法内部创建了一个新的String对象,并将这个新的String对象返回。对ss是没有做任何操作的,我们也知道String是不可变的嘛。源码如下:

public String replace(char oldChar, char newChar) {
// 判断替换字符和被替换字符是否相同
if (oldChar != newChar) {
int len = value.length;
int i = -1;
// 将源字符串转换为字符数组
char[] val = value; /* avoid getfield opcode */
while (++i < len) {
// 判断第一次被替换字符串出现的位置
if (val[i] == oldChar) {
break;
}
}
// 从出现被替换字符位置没有大于源字符串长度
if (i < len) {
char buf[] = new char[len];
for (int j = 0; j < i; j++) {
// 将源字符串,从出现被替换字符位置前的字符将其存放到字符串数组中
buf[j] = val[j];
}
while (i < len) {
char c = val[i];
// 开始进行比较;如果相同的字符串替换,如果不相同按原字符串
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
// 使用String的构造方法进行重新创建String
return new String(buf, true);
}
}
return this;
}

方法内部最后重新创建新的String对象,并且返回这个新的对象,原来的对象是不会被改变的。substring(),toLowerCase()方法也是如此。

还有诸如contact()方法,源码如下:

public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}

从上可知参数str不能为null,否则就会包空指针异常。用contact()拼接字符串速度也很快,因为直接Arrays.copyOf,直接内存复制。

面试的时候,如果能对一些方法有自己的认识,看过底层源码,对于面试官来说会有比较深刻的印象!

你真的了解String的常见API吗?的更多相关文章

  1. javascript 内置对象及常见API

    javascript 内置对象及常见API 2012-09-02 15:17 571人阅读 评论(0) 收藏 举报 javascript正则表达式文档浏览器urlstring Javascript内置 ...

  2. 【java】String类常见操作

    秋招做题需要,总结String类常用api如下: 简单的:str.length().str.isEmpty().str.split(“;”)切割 1.字符串反转:借助StringBuilder/Str ...

  3. ES5新增数组方法测试和字符串常见API测试

    首先是ES5新增数组方法测试: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...

  4. 【selenium】- webdriver常见api

    本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1.常见API 2.打开网址 3.操作浏览器 quit()没有完全关闭进程,依旧占用资源. 4.输入框操作 5.选择框操作 6.特殊窗口操作 ...

  5. Java之String类常用API

    目录 Java之String类常用API char chatAt(int index) int length() char[] toCharArray() String(char value[]) S ...

  6. JDBC简介及JDBC编写步骤及常见API

    JDBC : Java Database Connectivity,Java数据库连接.SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. JDBC就像一座桥 ...

  7. 8.2 常见api:String类的使用

    /* * String:字符串类 * 由多个字符组成的一串数据 * 字符串其本质是一个字符数组 * * 构造方法: * String(String original):把字符串数据封装成字符串对象 * ...

  8. Java操作mongoDB2.6的常见API使用方法

    对于mongoDB而言,学习方式和学习关系型数据库差不太多 開始都是学习怎样insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是 ...

  9. 《java入门第一季》之类(String类常见方法小叙)

    String类下面的构造方法和一些常见的方法: /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,可以知道 * A:字符串字面值"abc&quo ...

随机推荐

  1. 为什么Nginx性能比Apache高

    Nginx的工作原理 nginx在启动后,会有一个master进程和多个worker进程.master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控wo ...

  2. java中对于二位数组的简单操作,进而可以递推复杂操作

    1.程序 2.结果 3.内循环的次数 arr[x].length

  3. 记录一个mysql的case when用法

    SELECT wle.*, CASE WHEN '2017-08-10 14:00:00' > wle.et THEN '回看' WHEN wle.st >= '2017-08-10 14 ...

  4. hdu 2191 悼念512汶川大地震遇难同胞 【多重背包】(模板题)

    题目链接:https://vjudge.net/problem/HDU-2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活                                   ...

  5. P1590 失踪的7

    P1590 失踪的7进制转换的题目,如果把一个10进制的数当成9进制,相当于没有9这个数字,题目失踪了7,但是无所谓.如果当前的大于7,它就跳过了一个数字,向左移动1位. #include<io ...

  6. Java开发人员必须掌握的Linux命令(二)

    子曰:"工欲善其事,必先利其器." 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心. 本篇的旅 ...

  7. MongoDB学习路线

    转载博客: 1.MongoDB学习笔记(一)MongoDB概述和安装 http://www.cnblogs.com/wupeiqi/archive/2013/05/12/3074478.html 2. ...

  8. es6的解构赋值用途

    (1)交换变量的值 let x = 1; let y = 2; [x, y] = [y, x]; 上面代码交换变量x和y的值,这样的写法不仅简洁,而且易读,语义非常清晰. (2)从函数返回多个值 函数 ...

  9. window10 还原精灵 破解版 冰点

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha=======

  10. Xdebug、XHProf 、OneAPM 和 SocketLog

    DevOps 生活变得美好的神器.分别是 Xdebug.XHProf .OneAPM 和 SocketLog 方法很简单,从 Xdebug 下载最新版的源代码. wget 解压: tar –zxvf  ...