一、字符串相关

推荐使用Apache Commons Lang3库

创建Empty字符串:return StringUtils.EMPTY; 或者 return "";

创建重复的字符串:StringUtils.repeat("abc", count【重复次数】);

创建带分隔串/符的重复的字符串:StringUtils.repeat("abc", "-", count);

字符串是否为Empty:StringUtils.isEmpty(someStr) 【isNotEmpty】

字符串是否为Blank:StringUtils.isBlank(someStr)【isNotBlank】(""、" "、\t都是Blank)

字符串是否由全字母构成:StringUtils.isAlpha(someStr)

字符串是否由全数字构成:StringUtils.isNumeric(someStr)

字符串是否由字母和数字构成:StringUtils.isAlphanumeric(someStr)

字符串是否等于另一个指定串:StringUtils.equals(someStr, otherStr)和StringUtils.equalsIgnoreCase(someStr, otherStr)

字符串是否包含某个指定字符串:StringUtils.contains(someStr, otherStr)和StringUtils.containsIgnoreCase(someStr, otherStr)【前面是否包含后面】

字符串是否以某个字符串开头:StringUtils.startsWith(someStr, otherStr)和(StringUtils.startsWithIgnoreCase(someStr, otherStr)

字符串是否以列表给的某一个串开头:StringUtils.startsWithAny("huawei_com", " ", "h")和StringUtils.startsWithAny("jfz.me", new String[] {"n", "h"});

字符串是否以某个字符串结尾:StringUtils.endsWith/endsWithIgnoreCase

字符串是否以列表给的某一个串结尾:StringUtils.endsWithAny("jfz.me", "net", "com");

字符串拼接:StringBuilder(线程不安全)、StringBuffer(线程安全)

字符串拼接(逗号分隔):String[] names = {"Zebe", "Hebe", "Mary", "July", "David"};String result = String.join(",", names);

或者String result = StringUtils.join(names, ",");

字符串拼接(支持前后缀、分隔符连接):

StringJoiner joiner2 = new StringJoiner(",", "{", "}");

for (final String name : names) {joiner2.add(name);}

字符串拼接(支持前后缀、分隔符连接)Java8:

String result = Arrays.stream(names).collect(Collectors.joining(","));

String result2 = Arrays.stream(names).collect(Collectors.joining(",", "{", "}"));

带占位符字符串拼接:

String msg = MessageFormat.format("The domain {0} was accessed {1} times.", domain, times);

默认的整数times被格式化了"10,000",这是个坑,解决:String.valueOf(times)或者 {1,number,#}占位

查找子字符串首次出现的位置(下标0开始):

StringUtils.indexOf(someStr, "the"); 或者 StringUtils.indexOfIgnoreCase(someStr, "the");

查找子字符串末次出现的位置:StringUtils.lastIndexOf(someStr, "the");或者StringUtils.lastIndexOfIgnoreCase(someStr, "the");

从某个位置查找子字符串首次出现的位置:StringUtils.indexOf(someStr, "the", 20);

从某个位置查找子字符串末次出现的位置:StringUtils.lastIndexOf(someStr, "the", 0);

查找子字符串出现的次数:StringUtils.countMatches(s, "the")

字符串全部替换:StringUtils.replace("sshhhs", "ss", "p"); StringUtils.replace("sshhhsshss", "ss", "7777", 2【最大替换次数】);

消除字符串中的所有空格符:StringUtils.replaceAll(" hello \r \r\n world. haha ", "\s+", "");

字符串映射列表式替换:StringUtils.replaceEach("www.github.org/github", new String[] {"github", "org"}, new String[] {"HUAWEI", "COM"});

字符串单次替换:StringUtils.replaceOnce("sshhhss", "ss", "p");

字符串头尾去空白:StringUtils.trim(" ip = 10.10.10.10 ");

提取指定下标的字符:String helloworld = "Hello, 世界!";helloworld.charAt(0); // 'H'

提取指定位置区间的子串:String result = StringUtils.substring(str, start, end);

提取指定分隔串之后的子串:

首次之后:StringUtils.substringAfter(fullClass, ".")

末次之后:StringUtils.substringAfterLast(fullClass, ".")

提取指定分隔串之前的子串:

首次之前:StringUtils.substringBefore(fullClass, ".")

末次之前:StringUtils.substringBeforeLast(fullClass, ".")

提取指定分隔串之间的子串:StringUtils.substringBetween(log, "[", "]")

按指定字符/字符串分割字符串

StringUtils.split("foo:bar", ':'); // ["foo", "bar"]

StringUtils.split("foo###bar", "###"); // ["foo", "bar"]

按指定正则表达式分割字符串

String[] exampleResult = example.split("[+\-*/]"); // exampleResult数组["10", "20", "30", "40", "50"]

字符串转小写大写:StringUtils.lowerCase("Name is Yao Ming", Locale.ENGLISH); StringUtils.upperCase("Name is Yao Ming", Locale.ENGLISH);

字符串与Char数组互转:char[] cc = ss.toCharArray();或String ss = String.valueOf(cc);

字符串与Character数组互转:Character[] cc = ss.chars().mapToObj(c -> (char) c).toArray(Character[]::new);

中间转换:char[] cc = string.toCharArray(); Character[] characters = ArrayUtils.toObject(cc);

字符串与Byte数组互转(关键要指定编码):

byte[] byteArray = ss.getBytes(StandardCharsets.UTF_8);

String restore = new String(bytes, StandardCharsets.UTF_8);

字符串与CharBuffer互转

CharBuffer charBuffer = CharBuffer.wrap(str);

String str = charBuffer.toString();

Char数组与CharBuffer互转

CharBuffer charBuffer = CharBuffer.wrap(charArray);

CharBuffer charBuffer = CharBuffer.wrap(charArray).asReadOnlyBuffer();

char[] charArray = charBuffer.array();

Byte数组与ByteBuffer互转

ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray);

ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray).asReadOnlyBuffer();

byte[] byteArray = new byte[byteBuffer.remaining()]; byteBuffer.get(byteArray, 0, byteArray.length);

CharBuffer与ByteBuffer互转

CharBuffer charBuffer = CharBuffer.wrap(str);

Charset cs = Charset.forName(charset);

CharsetEncoder coder = cs.newEncoder();

ByteBuffer byteBuffer = coder.encode(charBuffer);

Charset cs = Charset.forName(charset);

CharsetDecoder coder = cs.newDecoder();

CharBuffer charBuffer = coder.decode(byteBuffer);

String str = charBuffer.toString();

二、基本类型、枚举相关

三、避免空指针

四、参数相关

五、异常处理

优雅写Java之一(常见编程技巧)的更多相关文章

  1. 优雅写Java之三(IO与文本解析)

    一.资源相关 二.路径与文件 读文件: String fileName = "str.txt"; Files.lines(Paths.get(fileName), Standard ...

  2. 优雅写Java之四(类与对象)

    一.类相关用法 二.Bean 三.泛型与注解 四.序列化

  3. 优雅写Java之二(数组集合流)

    一.数组 二.集合 三.流 学习整理中,本文待补充--

  4. 【原创】怎样才能写出优雅的 Java 代码?这篇文章告诉你答案!

    本文已经收录自 JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. 本文比较简短,基本就是推荐一些对于写好代码非常有用的文章或者 ...

  5. Java Socket常见异常处理 和 网络编程需要注意的问题

    在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...

  6. java命名规范和编程技巧

    一个好的java程序首先命名要规范. 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,方便维护等作用 Package 的命名 Package 的名字应该都是由一个小写 ...

  7. Java编程最差实践(常见编程错误典范)

    转载自  http://macrochen.iteye.com/blog/1393502 每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题.虽然一般 ...

  8. 写Java代码的一些小技巧

    写Java代码有三年多了,遇到过很多坑,也有一些小小的心得.特地分享出来供各位学习交流.这些技巧主要涉及谷歌Guava工具类的使用.Java 8新特性的使用.DSL风格开发.代码封装等技巧. 一.nu ...

  9. 偏执却管用的10条Java编程技巧

    本文由 ImportNew - LynnShaw 翻译自 javacodegeeks.欢迎加入翻译小组.转载请见文末要求. 经过一段时间的编码(咦,我已经经历了将近20年的编程生涯,快乐的日子总是过得 ...

随机推荐

  1. POJ - 3415 Common Substrings (后缀数组)

    A substring of a string T is defined as: T( i, k)= TiTi +1... Ti+k -1, 1≤ i≤ i+k-1≤| T|. Given two s ...

  2. P3521 [POI2011]ROT-Tree Rotations (线段树合并)

    P3521 [POI2011]ROT-Tree Rotations 题意: 给你一颗树,只有叶子节点有权值,你可以交换一个点的左右子树,问你最小的逆序对数 题解: 线段树维护权值个个数即可 然后左右子 ...

  3. JQuery多个异步操作后执行(resolve,promise,when,done)

    代码分享: //3秒后完成 function asyncThing1() { var dfd = $.Deferred(); setTimeout(function () { alert('async ...

  4. Android3_了解Gradle工具

    一.Gradle Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于K ...

  5. 重置Rhapsody超级管理员administrator的密码

    Rhapsody的安装信息说明 rhapsody 默认初始安装的用户名为 Administrator 密码为 rhapsody 配置文件rhapsody.properties位于位于{安装目录}\Rh ...

  6. 第二阶段:2.商业需求文档MRD:2.MRD-目标市场分析

    版本管理的变更人,属性,时间以及审核人都要严格的写清楚. MRD主要面向的是参与这个需求同级别的同时或主管,让大家更好的了解这个产品的各个方面,达成共识. 现在互联网的发展周期很短,不需要看4.5年, ...

  7. 第二阶段:2.商业需求分析及BRD:1.产品需求管理

    产品经理需要投入大量的时间在需求方面的工作. 一张图看出需求多么重要.各个方面的人物对需求的误解导致的后果. 首先收集需求 需求采集 可以用excel收集数据并整理 备注信息也很重要 有时候要跟提出人 ...

  8. 最小化centos7.4系统静默安装oracle12.2

    一 orace简介 ORACLE(甲骨文)公司.Oracle Database (甲骨文数据库) 是一个具有对象和可扩展标记语言(XML)功能的关系数据库,提供的以分布式数据库为核心的一组软件产品,是 ...

  9. QTableView 控件的简单使用

    QTableView类提供了一个表视图的默认模型/视图实现. 一个QTableView实现一个表视图,它显示来自一个模型的项目.这个类用于提供以前由QTable类提供的标准表,但是使用Qt的模型/视图 ...

  10. JVM探秘:内存分配与回收策略

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 内存分配一般关注的是对象在堆上分配的情况,对象主要分配在新生代的Eden区中,如果启用 ...