面试官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. struts2之OGNL和struts2标签库和ValueStack对象

    OGNL简介: (1)OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目.  struts2框架默认就支持Ognl表达式语言(所以 ...

  2. <noip2017>列队

    题解: 考场实际得分:45 重新看了一下,发现至少80分是很好拿的 对于前30% 暴力 另20% 显然离线搞一下就可以了(大概当初连离线是啥都不知道) 另另30%其实只要维护第一行和最后一列就可以了, ...

  3. python全栈开发day44-js、DOM、BOM

    JS的三大部分 一.ECMAJavaScript基础语法: 1.javascript的引入方式 1) 行内式 <script> alert(1) </script> 2) 引入 ...

  4. springmvc返回中文乱码问题

    关于springmvc的返回中文乱码的问题,网上可谓是清一色的一样,无外乎就两种,要么在局部类或这方法上解决,类似如下的代码: @GetMapping(value="/error/query ...

  5. Codeforces 1041F Ray in the tube (看题解)

    Ray in the tube 感觉是套路题.. 如果确定一个差值x我们如何取确定答案呢, 我们把a[ i ] -> a[ i ] % (2 * x), 把b[ i ] -> (b[ i ...

  6. BZOJ1088 [SCOI2005]扫雷Mine 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1088 题意概括 扫雷.只有2行.第2行没有雷,第一行有雷.告诉你第二行显示的数组,问有几种摆放方式 ...

  7. 【Java】 剑指offer(17) 在O(1)时间删除链表结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除 ...

  8. 全排列-hdu1716

    题目描述: 题目意思很简单,就是要我们输出全排列后的数据组成,但是要注意组成的数据是一个实数,并且千位数字相同的处在同一行中. 代码实现: #include<stdio.h> #inclu ...

  9. 附002.Docker常见命令

    # docker --help Usage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ -h ...

  10. IntelliJ IDEA(九) :插件(转)

    最近项目比较忙,很久没有更新IDEA系列了,今天介绍一下IDEA的一些炫酷的插件,IDEA强大的插件库,不仅能给我们带来一些开发的便捷,还能体现我们的与众不同. 0|11.插件的安装 打开settin ...