类型(String,short,Integer)之间转换以及坑,String判断/提取数字,Json工具类使用,String常用方法

  • 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

  1. 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

map和object转换

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());
        }
    }
  1. 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,,
  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中,枚举类型是一种特殊的类,它定义了一组有限的常量值。枚举类型可以通过枚举常量的名称来进行访问。而StringIntegerJava中的两个常用的数据类型,分别代表字符串和整数。 在Java中,枚举类型StringInteger类型之间可以进行相互转换。具体来说,可以通过枚举常量的名称获取对应的枚举值,也可以通过枚举值获取对应的名称。 举个例子,假设我们有一个枚举类型Season,定义了四个常量:SPRING、SUMMER、AUTUMN、WINTER。我们可以通过以下代码将枚举常量转换String类型: ``` Season season = Season.SUMMER; String seasonName = season.name(); ``` 在这个例子中,我们首先定义了一个Season类型的变量season,并将其赋值为枚举常量SUMMER。然后,我们通过调用season的name()方法,获取了该枚举常量的名称,将其赋值给了一个String类型的变量seasonName。 反过来,我们也可以将一个String类型的变量转换为枚举常量。下面是一个示例代码: ``` String seasonName = "SUMMER"; Season season = Season.valueOf(seasonName); ``` 在这个例子中,我们首先定义了一个String类型的变量seasonName,并将其赋值为字符串"SUMMER"。然后,我们通过调用Season类的valueOf()方法,将该字符串转换为对应的枚举常量。 对于Integer类型,我们也可以通过类似的方式进行转换。例如,假设我们有一个枚举类型Status,定义了两个常量:SUCCESS和FAILURE。我们可以通过以下代码将枚举常量转换Integer类型: ``` Status status = Status.SUCCESS; Integer statusCode = status.ordinal(); ``` 在这个例子中,我们首先定义了一个Status类型的变量status,并将其赋值为枚举常量SUCCESS。然后,我们通过调用status的ordinal()方法,获取了该枚举常量在枚举中的序号,将其赋值给了一个Integer类型的变量statusCode。 反过来,我们也可以将一个Integer类型的变量转换为枚举常量。下面是一个示例代码: ``` Integer statusCode = 1; Status status = Status.values()[statusCode]; ``` 在这个例子中,我们首先定义了一个Integer类型的变量statusCode,并将其赋值为整数1。然后,我们通过调用Status类的values()方法获取枚举类型的所有值,再通过索引获取对应的枚举常量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH = 7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值