优雅写Java之一(常见编程技巧)
一、字符串相关
推荐使用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之一(常见编程技巧)的更多相关文章
- 优雅写Java之三(IO与文本解析)
一.资源相关 二.路径与文件 读文件: String fileName = "str.txt"; Files.lines(Paths.get(fileName), Standard ...
- 优雅写Java之四(类与对象)
一.类相关用法 二.Bean 三.泛型与注解 四.序列化
- 优雅写Java之二(数组集合流)
一.数组 二.集合 三.流 学习整理中,本文待补充--
- 【原创】怎样才能写出优雅的 Java 代码?这篇文章告诉你答案!
本文已经收录自 JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. 本文比较简短,基本就是推荐一些对于写好代码非常有用的文章或者 ...
- Java Socket常见异常处理 和 网络编程需要注意的问题
在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...
- java命名规范和编程技巧
一个好的java程序首先命名要规范. 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,方便维护等作用 Package 的命名 Package 的名字应该都是由一个小写 ...
- Java编程最差实践(常见编程错误典范)
转载自 http://macrochen.iteye.com/blog/1393502 每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题.虽然一般 ...
- 写Java代码的一些小技巧
写Java代码有三年多了,遇到过很多坑,也有一些小小的心得.特地分享出来供各位学习交流.这些技巧主要涉及谷歌Guava工具类的使用.Java 8新特性的使用.DSL风格开发.代码封装等技巧. 一.nu ...
- 偏执却管用的10条Java编程技巧
本文由 ImportNew - LynnShaw 翻译自 javacodegeeks.欢迎加入翻译小组.转载请见文末要求. 经过一段时间的编码(咦,我已经经历了将近20年的编程生涯,快乐的日子总是过得 ...
随机推荐
- webpack 命令
--content-base <file/directory/url/port>:内容的路径. --quiet: 在控制台不输出任何内容 --no-info: 抑制无聊的信息 --colo ...
- EF 配置多个数据库
1.先创建两个DbContext using System; using System.Data.Common; using System.Data.Entity; using System.Data ...
- A non well formed numeric value encountered
在从数据库获取时间戳数据的时候返回的结果是varchar类型 然后在用date("Y-m-d H:i:s", 时间戳)的时候会报错A non well formed numeric ...
- JDK源码那些事儿之浅析Thread上篇
JAVA中多线程的操作对于初学者而言是比较难理解的,其实联想到底层操作系统时我们可能会稍微明白些,对于程序而言最终都是硬件上运行二进制指令,然而,这些又太过底层,今天来看一下JAVA中的线程,浅析JD ...
- leetcode.1275找出井字棋的获胜者
A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上.第一个玩家 A 总是用 "X" 作为棋子, ...
- 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)
[题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...
- $Noip2011/Luogu1315$ 观光公交 贪心
$Luogu$ $Sol$ 觉得这题贪心要想很多事情,不适合我这种没脑子选手$ovo$.看题解还理解了很久. 最开始是这样想的:把所有的路段上的乘客按大小排个序用加速器就好了,这个想法被自己轻松$ha ...
- 解决vs2017创建.net core失败以及不能登录问题
创建.net core web 提示值不能为空,开始以为是vs安装错误,重新安装了一遍也是这样,之前都好好的,然后登录也不行了(提示我们无法刷新此账号的凭据),百度了下,是ie不能上网的问题.解决了登 ...
- Java 发展简史:初生遇低谷,崛起于互联网
Java 起源与诞生 20世纪90年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且功能强大,使用它可以大幅度提升消费性电子产品的智能化程度. SUN公司为了抢占市场先机,在1991年成立了一 ...
- docker启动报错 (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport
今天修改完docker宿主机的防火墙文件 vim /etc/sysconfig/iptables 停止容器再启动时 报如下错误 (iptables failed: iptables --wait -t ...