- String 和 short
String temp = “12”;
short sh = Short.parseShort(temp);
最好再try,catch一下。
- String 截取部分转为Integer误区
String str = "14";
char ch1 = str.charAt(0); //1
char ch2 = str.charAt(1); //4
Integer num1 = Integer.valueOf(str.charAt(0)); //49
Integer num2 = Integer.valueOf(str.charAt(1)); //52
Integer num3 = Integer.valueOf(String.valueOf(str.charAt(0))); //1
Integer num4 = Integer.valueOf(String.valueOf(str.charAt(1))); //4
输出分别是:
===============ch1==============1
===============ch2==============4
===============num1==============49
===============num2==============52
===============num3==============1
===============num4==============4
- string判断/提取数字
@Test
public void testtemp() {
System.out.println("========================判断一个字符串是否为数字型=======================================");
String numberStr = "456465446465445445454";
String str24K = "d4sa4da4d6sa4d";
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
System.out.println(pattern.matcher(numberStr).matches());//true
System.out.println(pattern.matcher(str24K).matches());//false
System.out.println("========================提取字符串中的数字=======================================");
String str1111 = "";
String str2222 = "网商大会回家33双怠速33是的99sds44";
String str3333 = "sdsadsada";
String str4444 = "双怠速收到收到";
String str5555 = "22222222222";
String regEx="[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m1 = p.matcher(str1111);
System.out.println( m1.replaceAll("").trim());//
Matcher m2 = p.matcher(str2222);
System.out.println( m2.replaceAll("").trim());//33339944
Matcher m3 = p.matcher(str3333);
System.out.println( m3.replaceAll("").trim());//
Matcher m4 = p.matcher(str4444);
System.out.println( m4.replaceAll("").trim()); //
Matcher m5 = p.matcher(str5555);
System.out.println( m5.replaceAll("").trim());//22222222222
}
输出为:
========================判断一个字符串是否为数字型=======================================
true
false
========================提取字符串中的数字=======================================
33339944
22222222222
object→map,object→javabean,object→list
fastjson依赖包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
Object datas = "{\\\"password\\\":\\\"123456\\\",\\\"username\\\":\\\"张三\\\"}";
注意datas并不是json格式的字符串,经过toJSONString才会转换为json
//转 MAP 这种方式经常会出错 见下面的方法一
Map<String,Object> map = JSONObject.parseObject(JSONObject.toJSONString(datas));
//转JavaBean
User user = JSON.parseObject(JSONObject.toJSONString(datas),User.class);
//转List
List<User> users = JSONArray.parseArray(JSONArray.toJSONString(datas),User.class);
List<Map> list = JSONArray.parseArray(JSONArray.toJSONString(datas),Map.class);
List<User> users = userService.SelAll();
//将list转化为JSON字符串
String uStr = JSON.toJSONString(users);
//实体中含有Date类型 简化转换形式 相当于方法前加注解:@JsonFormat(pattern = "yyyy-MM-dd")
String uStrD = JSON.toJSONStringWithDateFormat(users,"yyyy-MM-dd HH:mm:ss");
//实体中含有Date类型 序列化转换形式 相当于方法前加注解:@JsonFormat(pattern = "yyyy-MM-dd")
String uStrDD = JSON.toJSONStringWithDateFormat(user,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat);
//将转化后的字符串变成list 如果以object类型接受,转换过的日期类型会以object存储,前端会接受成字符串
List<Object> list1 = JSONArray.parseArray(uStr);
List<Object> list2 = JSONArray.parseArray(uStrD);
List<Object> list3 = JSONArray.parseArray(uStrDD);
方法一:JSON转map
1.首先依赖为
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20201115</version>
</dependency>
实现为:
@Test
public void test(){
String testDataLists = "[{\"student\":\"小王\",\"teacher\":\"小李\",\"coker\":\"小胖\"}]";
Map<String,String> map = new HashMap<>();
JSONArray ja = null;
ja = new JSONArray(testDataLists);
for(int i = 0;i < ja.length();i++){
JSONObject jo = (JSONObject)ja.get(i);
System.out.println(jo);
Iterator it = jo.keys();
while(it.hasNext()){
String key = (String)it.next();
String value = jo.getString(key);
System.out.println(key+"===="+value);
map.put(key.trim(),value.trim());
}
}
}
//map 和 Bean之间的转换
//测试fastjson将map转化为bean
@Test
public void mapToBean() {
//数据不全面的
Map<String,Object> map = new HashMap<>();
map.put("bookname", "钢铁是怎样炼成的");
map.put("prices", 35.3);
map.put("counts", 3000);
//转化
Books books = JSON.parseObject(JSON.toJSONString(map), Books.class);
//转化成功
System.out.println(books.toString());
//内嵌的实体
try {
Map<String,Object> map1 = new HashMap<>();
map1.put("UUID", UUIDUtils.getID());
map1.put("books", map);
HaveBooks haveBooks = JSON.parseObject(JSON.toJSONString(map1), HaveBooks.class);
System.out.println(haveBooks.getBooks().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public class Books {
private Integer id;
private String bookname;
private Double prices;
private Integer counts;
private int typeid;
}
public class HaveBooks {
private String UUID;
private Books books;
}
另一种形式Object,向Map,JavaBean,List等的转换
首先,这个Object的形式为用”=“等号连接的键值对,这个其实是Map.toString的结果
例如:{name=张三, 年纪=三年二班, 性别=男}
@Test
public void test_3(){
Map<String,String> map = new HashMap<>();
map.put("name","张三");
map.put("性别","男");
map.put("年纪","三年二班");
System.out.println(map.toString());
//输出为:
//{name=张三, 年纪=三年二班, 性别=男}
}
对于这种 Map.toString 后再次转为Map或者JavaBean有以下两种处理方式
方式一:Gson 或者 Gson+其他
1.Gson 可以将 Map.toString后的转化为JSONObject ,然后可以用Gson自带的或者其他技术进行到Map或者javaBean的转换
2.依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
3.代码
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
@Test
public void test_2(){
Map<String,String> map_3 = new HashMap<>();
map_3.put("name","qqqqq");
map_3.put("className","三年二班");
map_3.put("age","30");
String s3 = map_3.toString();
//将字符串转化为 JsonObject
JsonObject respJson=new JsonParser().parse(s3).getAsJsonObject();
//转化为JsonObject 后 你可以用任何技术 进行转换 下面是 用gson自带的API进行转换
Gson gson = new Gson();
Type type = new TypeToken<Map<String, String>>(){}.getType();
//首先是转map
Map<String, String> k_3 = gson.fromJson(respJson, type);
for (Map.Entry<String, String> stringStringEntry : k_3.entrySet()) {
System.out.println(stringStringEntry.getKey() + "===" + stringStringEntry.getValue());
}
//然后是转 javaBean
ManInfo info = gson.fromJson(respJson, ManInfo.class);
System.out.println(info.toString());
}
方式二: json-lib
1,这种方式在面对键值对中value是String类型时,操作比较繁琐,当然可以通过配置JsonConfig 来解决 ,这里不建议使用
//这种方法 除了 value 是字符串类型 需要 加 转义符 外 其他类型 就不需要加转义符 比如 int
//value 是String 类型
Map<String,String> map_1 = new HashMap<>();
map_1.put("name","\"qqqqq\"");
map_1.put("className","\"三年二班\"");
//需要对 val是字符串类型再加一层 双引号
2.依赖
<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<!--这个是一定要加的,因为它使用jdk15写的-->
<classifier>jdk15</classifier>
</dependency>
3.代码
@Test
public void test_1(){
//这种方法 除了 value 是字符串类型 需要 加 转义符 外 其他类型 就不需要加转义符 比如 int
//value 是String 类型
Map<String,String> map_1 = new HashMap<>();
map_1.put("name","\"qqqqq\"");
map_1.put("className","\"三年二班\"");
String s1 = map_1.toString();
// JSONObject fromObject(Object object, JsonConfig jsonConfig)
Map<String,String> k_1 = JSONObject.fromObject(s1);
for (Map.Entry<String, String> stringObjectEntry : k_1.entrySet()) {
System.out.println(stringObjectEntry.getKey()+"==="+stringObjectEntry.getValue());
}
//转为JsonObject
JSONObject object = JSONObject.fromObject(s1);
System.out.println(object.toString());
//value 是Integer 类型
Map<String,Integer> map_2 = new HashMap<>();
map_2.put("qwer",1);
map_2.put("wer",2);
String s2 = map_2.toString();
Map<String,Integer> k_2 = JSONObject.fromObject(s2);
// JSONObject fromObject(Object object, JsonConfig jsonConfig)
for (Map.Entry<String, Integer> stringIntegerEntry : k_2.entrySet()) {
System.out.println(stringIntegerEntry.getKey()+"==="+stringIntegerEntry.getValue());
}
}
- String的常用方法
下面介绍的是常用的方法,如果找到要用的,或者了解详细信息,点击这里StringAPI大全
方法 | 介绍 |
---|---|
spilt | 根据匹配的分隔符来拆分字符串 |
length | 返回字符串长度 |
trim | 返回字符串去掉前面和尾部空格的版本 |
replace(String A,String B) | 返回字符串用B替换A后的字符串 |
indexOf(String A) | 返回字符串中,第一次出现A的位置,从0开始 |
lastIndexOf(String A) | 返回字符串中,最后一次出现B的位置,从0开始 |
substring(int A)/substring(int A,int B) | 返回从A开始截取后的字符串,如果没有填B,那么就是A之后的全部部分,注意,是从0开始的 |
toLowerCase/toUpperCase | 返回全部变为小/大写的字符串 |
下面是它们的综合应用 |
@Test
public void test() {
String strDemo1 = " 2Cm,,,,a,,,B,,3 ";
String[] strDemo2 = strDemo1.split(",");
//join将数组重新拼接成字符串,用右边的分隔符分割
System.out.println("==split=="+StringUtils.join(strDemo2,"$")+"==长度为=="+strDemo2.length);
System.out.println("==trim/replace=="+strDemo1.replace(",", "").trim());
//算最前面的2
System.out.println("==indexof=="+strDemo1.indexOf("2Cm")+"==lastIndexOf=="+strDemo1.lastIndexOf("2Cm"));
//包前不包后
System.out.println("==substring=="+strDemo1.substring(strDemo1.indexOf("2Cm"),strDemo1.lastIndexOf("3")).toLowerCase());
}
输出为:
==split== 2Cm$$$$a$$$B$$3 ==长度为==10
==trim/replace==2CmaB3
==indexof==1==lastIndexOf==1
==substring==2cm,,,,a,,,b,,