面试官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. 096实战 在windows下新建maven项目

    1.拷贝settings到.m2文件下 2.修改文件 3.新建Project项目 4.转换为maven项目 config下转换 5.拷贝pom文件 <project xmlns="ht ...

  2. java技术第二次作业

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载? 构造方法是用于对对象初始化的方法,当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数.在程序员没有给类提供构造函数的情况下,Ja ...

  3. IdentityServer4-从数据库获取User进行授权验证(五)

    本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置. 一.新建Web API资源服务,命名为ResourceAPI (1)新建API ...

  4. VB.NET只允许打开一个实例

    If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) ...

  5. Codeforces.788C.The Great Mixing(bitset DP / BFS)

    题目链接 \(Description\) 有k种饮料,浓度Ai给出,求用最少的体积配成n/1000浓度的饮料. \(Solution\) 根据题意有方程 (A1x1+A2x2+...+Anxn)/[( ...

  6. 20172302 《Java软件结构与数据结构》第七周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 第六周 第七周 教材学习内容总结 第11章 二叉查找树 1.二叉查找树是一种含有附加属性的二叉树,该属性即其左孩子小于父节点,而父 ...

  7. mysql week 的使用方法

    mysql week 的使用方法,详情请看: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function ...

  8. thinkphp5 学习笔记

    一.开发规范: 二.API: 1.数据输出:新版的控制器输出采用 Response 类统一处理,而不是直接在控制器中进行输出,通过设置 default_return_type 就可以自动进行数据转换处 ...

  9. C++使用thread类多线程编程

    转自:C++使用thread类多线程编程 C++11中引入了一个用于多线程操作的thread类,下面进行简单演示如何使用,以及如果进行多线程同步. thread简单示例 #include <io ...

  10. HTML5 在canvas中绘制复杂形状

    作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/32942667 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,画图环 ...