文章目录
0.安装JDK
0.1 Windows安装JDK
0.2 Mac安装JDK
0.3 linux安装JDK
修改系统配置文件,可以达到永久改变环境变量的目的。修改某个配置文件后,在 Shell 下运行该文件即可使新的设置生效,或者重新登录使用新的变量。
运行文件可用source 文件的方式操作,例如:
source ~/.bash_profile
通常 修改 全局配置文件 /etc/profile 或者 用户配置文件 ~/.bashrc(有的发行版上为 ~/.bash_profile)
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME=/usr/local/jdk1.8.0_11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
1.常量定义
2.字符串拼接
import java.util.HashSet;
import java.util.Set;
public class SetUdf extends ScalarFunction {
private static final String SPLIT_SEPARATOR="@@@@";
/**
* @param content 字符串
* @param array 字符串数组
* @return 新的字符串数组
*/
public String eval(String content, String array) {
Set<String> set=new HashSet<String>();
if(content != null && content.length() != 0){
set.add(content);
}
if(array !=null && array.length() != 0 ){
String[] arrayList = array.split(SPLIT_SEPARATOR);
for(String ele:arrayList){
set.add(ele);
}
}
//并发请求下,使用线程安全的StringBuffer
StringBuffer sb = new StringBuffer();
for(String str:set){
sb.append(str).append(SPLIT_SEPARATOR);
}
String result="";
if(sb != null && sb.length() !=0){
result=sb.substring(0,sb.length()-SPLIT_SEPARATOR.length());
}
return result;
}
/**
* @param array 字符串数组
* @return 字符串数组长度
*/
public int eval(String array) {
if(array != null && array.length() != 0){
return array.split(SPLIT_SEPARATOR).length;
}else{
return 0;
}
}
}
3.contains与matches的使用
contains中不需要转义\,否则会认为是字符串me\.baidu
matches中使用.,如果不使用转义,则表示匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
System.out.println("/data/com.android.dualaid/packages//me.baidu".contains("me\\.baidu")); //false
System.out.println("/data/com.android.dualaid/packages//me.baidu".contains("me.baidu")); //true
System.out.println("/data/com.android.dualaid/packages//me.baidu".matches("me\\.baidu")); //false
System.out.println("/data/com.android.dualaid/packages//me.baidu".matches(".*me.baidu.*")); //true
System.out.println("/data/com.android.dualaid/packages//me.baidu".matches(".*me\\.baidu.*")); //true
4.判断字符串字节长度
public class StringLengthbUdf extends ScalarFunction {
/**
* @param str
* @return 字符串字节数
*/
public long eval(String str,String encoding) {
try {
if(isNullOrEmpty(str))
return 0L;
else {
long length = str.getBytes(encoding).length;
//将大于131072B的字符串打印
if(length>131072L){
System.out.println("字符串字节数大于131072b: "+str);
}
return length;
}
} catch (Exception e) {
System.err.println("输入字符串为: "+str+"\n报错信息: "+e.getMessage());
return -1L;
}
}
public static boolean isNullOrEmpty(String str){
return null == str || "".equals(str);
}
}
参考
判断字符串长度 https://www.zhangshilong.cn/work/290157.html
判断字符串长度 https://blog.csdn.net/n8790185/article/details/80257975
5.枚举类型的使用
public enum StatusCodeEnum {
SUCCESS(200, "信息正确"),
SYSTEM_ERROR(500, "系统异常"),
PARAM_NULL(300, "参数为null"),
GRAND_FAIL(301, "授权失败"),
REMOVE_FAIL(302, "回收权限失败"),
RETURN_NULL(303, "ACL返回为空"),
GET_MAPPING_FAIL(304, "获取映射关系失败"),
NEED_LOGIN(400, "需要登录"),
GET_PERMISSION_CODE_ERROR(402, "获取授权码失败"),
USER_NOT_EXIST(403, "用户表不存在该用户"),
INSERT_FAIL(600, "插入数据库失败"),
SAME_CATEGORY_NAME(601, "该目录下存在同名文件夹,请修改名称!"),
HAVE_CHILD_CATEGORY(602, "该目录下存在子目录,不能删除!"),
DELETE_FAIL(603, "删除失败"),
HAVE_MODEL_MAPPING(604, "该目录下存在模型,不能删除!"),
CAN_NOT_RENAME(605, "该文件夹非本人创建禁止重命名!"),
CAN_NOT_DELETE(606, "该文件夹非本人创建禁止删除!"),
NOT_EXIST_CATEGORY(607, "当前操作文件夹不存在!"),
NO_PERMISSION(700, "权限不足"),
;
private Integer code;
private String desc;
StatusCodeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getMsg() {
return desc;
}
}
StatusCodeEnum.SUCCESS.getValue()
6.JSON构造
public class BuildJson extends ScalarFunction{
/**
* @param jsonKV
* @return
*/
public String eval(Object... jsonKV){
int length = jsonKV.length;
String jsonKey = String.valueOf(jsonKV[length - 1]);
String[] jsonKeys = jsonKey.split(",");
Map<String, String> jsonMap = new HashMap<String, String>();
for (int i = 0; i < length-1; i++) {
String key = String.valueOf(jsonKeys[i]).replace("\n", "").replace(" ","");
String value = String.valueOf(jsonKV[i]);
//key = key.toLowerCase();
jsonMap.put(key,value);
}
String jsonString = JSONObject.toJSONString(jsonMap);
return jsonString;
}
7.[FastJson应用]JAVA对象与JSON互转
8.解决包冲突
Maven冲突 omitted for conflict with 解决
9.判断空
//使用String.valueof来进行类型转换时,一定要使用此判断str == "null"
public static boolean isEmpty(String str) {
return str == null || str == "null" || str.trim().equals("");
}
public boolean isNotNull(String str){
return null != str && !"null".equals(str) && !"".equals(str) ;
}
//未使用String.valueof来进行类型转换时,可使用下面方法判断空
public static boolean isNotEmpty(String str) {
return str != null && !str.trim().equals("");
}
注意使用String.valueof来进行类型转换时,会默认把null转为"null"字符串,判空可能会出现问题。
使用自带工具类包的方法StringUtils.isEmpty(),未使用String.valueof来进行类型转换时才可使用此方法
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
10.接口返回包装类
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class ResultUtil {
public static <T> JSONObject ok(T data) {
JSONObject res = new JSONObject();
res.put("success",true);
res.put("resultMessage","success");
res.put("resultCode",200);
res.put("data",data);
Map<String,Object> extInfo = new HashMap<>();
res.put("extInfo",extInfo);
return res;
}
public static <T> JSONObject error(T errorMsg) {
JSONObject res = new JSONObject();
res.put("success",false);
res.put("resultMessage",errorMsg);
res.put("resultMsg",errorMsg);
res.put("resultCode",500);
res.put("data",null);
Map<String,Object> extInfo = new HashMap<>();
res.put("extInfo",extInfo);
return res;
}
public static <T> JSONObject noAccess(T data) {
JSONObject res = new JSONObject();
res.put("success",false);
res.put("resultMessage","无权限访问");
res.put("resultMsg","无权限访问");
res.put("resultCode",401);
res.put("data",data);
Map<String,Object> extInfo = new HashMap<>();
res.put("extInfo",extInfo);
return res;
}
}
11.将数组字符串转数组
12.java判断某个数值是否在一个数值区间内
package com.alsc.risk.udf.util;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/**判断某个值是否在某个区间工具类,返回booblean值
*/
public class IntervalUtil {
/**
* 判断data_value是否在interval区间范围内
* @param data_value 数值类型的
* @param interval 正常的数学区间,包括无穷大等,如:(1,3)、>5%、(-∞,6]、(125%,135%)U(70%,80%)
* @return true:表示data_value在区间interval范围内,false:表示data_value不在区间interval范围内
*/
public static boolean isInTheInterval(String data_value,String interval) {
//将区间和data_value转化为可计算的表达式
String formula = getFormulaByAllInterval(data_value,interval,"||");
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
try {
//计算表达式
return (Boolean) jse.eval(formula);
} catch (Exception t) {
return false;
}
}
/**
* 将所有阀值区间转化为公式:如
* [75,80) =》 date_value < 80 && date_value >= 75
* (125%,135%)U(70%,80%) =》 (date_value < 1.35 && date_value > 1.25) || (date_value < 0.8 && date_value > 0.7)
* @param date_value
* @param interval 形式如:(125%,135%)U(70%,80%)
* @param connector 连接符 如:") || ("
*/
private static String getFormulaByAllInterval(String date_value, String interval, String connector) {
StringBuffer buff = new StringBuffer();
for(String limit:interval.split("U")){//如:(125%,135%)U (70%,80%)
buff.append("(").append(getFormulaByInterval(date_value, limit," && ")).append(")").append(connector);
}
String allLimitInvel = buff.toString();
int index = allLimitInvel.lastIndexOf(connector);
allLimitInvel = allLimitInvel.substring(0,index);
return allLimitInvel;
}
/**
* 将整个阀值区间转化为公式:如
* 145) =》 date_value < 145
* [75,80) =》 date_value < 80 && date_value >= 75
* @param date_value
* @param interval 形式如:145)、[75,80)
* @param connector 连接符 如:&&
*/
private static String getFormulaByInterval(String date_value, String interval, String connector) {
StringBuffer buff = new StringBuffer();
for(String halfInterval:interval.split(",")){//如:[75,80)、≥80
buff.append(getFormulaByHalfInterval(halfInterval, date_value)).append(connector);
}
String limitInvel = buff.toString();
int index = limitInvel.lastIndexOf(connector);
limitInvel = limitInvel.substring(0,index);
return limitInvel;
}
/**
* 将半个阀值区间转化为公式:如
* 145) =》 date_value < 145
* ≥80% =》 date_value >= 0.8
* [130 =》 date_value >= 130
* <80% =》 date_value < 0.8
* @param halfInterval 形式如:145)、≥80%、[130、<80%
* @param date_value
* @return date_value < 145
*/
private static String getFormulaByHalfInterval(String halfInterval, String date_value) {
halfInterval = halfInterval.trim();
if(halfInterval.contains("∞")){//包含无穷大则不需要公式
return "1 == 1";
}
StringBuffer formula = new StringBuffer();
String data = "";
String opera = "";
if(halfInterval.matches("^([<>≤≥\\[\\(]{1}(-?\\d+.?\\d*\\%?))$")){//表示判断方向(如>)在前面 如:≥80%
opera = halfInterval.substring(0,1);
data = halfInterval.substring(1);
}else{//[130、145)
opera = halfInterval.substring(halfInterval.length()-1);
data = halfInterval.substring(0,halfInterval.length()-1);
}
double value = dealPercent(data);
formula.append(date_value).append(" ").append(opera).append(" ").append(value);
String a = formula.toString();
//转化特定字符
return a.replace("[", ">=").replace("(", ">").replace("]", "<=").replace(")", "<").replace("≤", "<=").replace("≥", ">=");
}
/**
* 去除百分号,转为小数
* @param str 可能含百分号的数字
* @return
*/
private static double dealPercent(String str){
double d = 0.0;
if(str.contains("%")){
str = str.substring(0,str.length()-1);
d = Double.parseDouble(str)/100;
}else{
d = Double.parseDouble(str);
}
return d;
}
public static void main(String[] args) {
System.out.println(IntervalUtil.isInTheInterval("09", "[09,23]"));
//返回true
}
}
13.idea操作合集
14.java.io.InvalidClassException的解决方法
《nvalidClassException的解决方法》
《Serializable是什么,为什么要实现Serializable接口?》
100.JAVA架构师学习路径
参考
《阿里巴巴 Java 开发手册》.PDF
链接:https://pan.baidu.com/s/1HSqwdSXOxmIoV3H-YSETHA
提取码:3zdm
字符串判空的常用方法
https://blog.csdn.net/FZUMRWANG/article/details/110185053
https://blog.csdn.net/qq_45246098/article/details/123017279
字符串拼接的4种常用方法
https://blog.csdn.net/qq_44705904/article/details/114581004
java删除字符串中最后一个字符
https://blog.csdn.net/Soraa/article/details/108441426