java-string-api

首先,字符串的操作是计算机程序设计中最常见的行为。
####一、String(不可变对象)
提到字符串,就必定会想到String关键字,但String不是java的八大基本类型之一。至于它的特性,只读性,下面我们来看一段代码:

String str = "abcdefg";
System.out.println(str);
str = "1234567";
System.out.println(str);

打印结果为:
s = abcdefg
s = 1234567

很多人看到这里,很惊讶,内心表示mmp,你讹我呢,这不是改变了吗?还只读个鬼。
其实,真相是, str只是一个String对象的引用,并不是对象本身。对象在内存中是一块内存区,成员变量越多,这块内存区占的空间越大。引用只是一个4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象。
String
所以,String对象是不可变的,你可以给一个String对象加任意多的别名,因为String对象具有只读性,所以指向它的任何引用都不可能改变它的值,因此,也就不会对其他的引用有什么影响。

字符串基本操作:
1、substring(from,end)(含头不含尾)——截取

String str = "123456789";
System.out.println(str.substring(0, 5));
System.out.println(str.substring(4));
System.out.println(str.substring(4, 8));
结果:
12345
56789
5678

2、“装箱类型”.valueOf()——强制转换为别的类型

String str = "123456789";
System.out.println(Integer.valueOf(str));
System.out.println(Double.valueOf(str));
System.out.println(Boolean.valueOf(str));
结果:
123456789
1.23456789E8
false

3、trim()——去除字符串开头和结尾的空字符(空格,tab等)

System.out.println(" 12345 6789 ".trim());
结果:
12345 6789

4、charAt()——返回字符串该下标的字符

System.out.println("123456789".charAt(2));
结果:
3

5、split()——根据特定规则切割字符串

System.out.println(Arrays.toString("12 345 6789".split(" ")));
结果:
[12, 345, 6789]

6、startsWith(str)和endswidth(str)——判断字符串是否是以参数str指定的内容开始/结束

System.out.println("app1.1.0.apk".startsWith("app"));
System.out.println("app1.1.0.apk".startsWith("ap1"));
System.out.println("app1.1.0.apk".endsWith("apk"));
结果:
true
false
true

7、toUpperCase()和toLowerCase()——统一转换为大写或者是小写

8、toString()和valueOf()的区别
xx对象.toString():必须先创建对象,再调用对象的toString()方法
String.valueOf(XX对象):静态方法,不需要创建任何对象,就可以直接调用

People people = null;
//        System.out.println(people.toString());  //报错
String peopleStr = String.valueOf(people);
System.out.println(peopleStr);
结果:
null

9、toCharArray()和String()——字符串与字符数组之间的转换

char c[] = "123456789".toCharArray();
for(char a : c) {
    System.out.print(a +",");
}
System.out.println();
System.out.println(new String(c));
System.out.println(new String(c, 0, 4));
结果:
1,2,3,4,5,6,7,8,9,
123456789
1234

10、equals(Object anObject)——将此字符串与指定的对象比较

11、length()——获取字符串长度

12、isEmpty()——判断字符串是否为空

13、replace()——替换字符串

System.out.println("1233333".replace("3", "a"));
System.out.println("1233223".replace("3", "abc"));
System.out.println("1233223".replace("33", "abc"));
结果:
12aaaaa
12abcabc22abc
12abc223

14、indexOf()——返回指定字符(字符串)索引

System.out.println("123411741".indexOf("1"));
System.out.println("123411741".lastIndexOf("1"));
System.out.println("123411741".indexOf("1",2));
System.out.println("123411741".indexOf("41"));
System.out.println("123411741".lastIndexOf("41"));
结果:
0
8
4
3
7

####二、String,StringBuilder,StringBuffer三者的区别
说完String,其实还有另外两个关键字定义字符串的,方法都跟String差不多,我们来说一下它们的区别吧。
要说它们的区别,那就从速度说起,上面已经说了,因为String是不可变的特性,所以他的速度是最慢的;然后StringBuilder是线程不安全的,而StringBuffer是线程安全的,所以他们的速度排名顺序为:

StringBuilder > StringBuffer > String

当然,选择用什么不是完全根据速度来选择的,具体的选择我们可以根据实际情况来选择。

String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,作为AI语言模型,我没有办法提供代码或具体的技术实现。但是,我可以为你提供一些建议和指导。 首先,weixin-java-pay是一个Java语言的微信支付SDK,它提供了便捷的API调用接口,可以方便地实现微信支付功能。而Spring Boot是一个基于Spring框架的快速开发框架,可以大大提高开发效率。因此,将weixin-java-pay与Spring Boot整合起来,可以让我们更加便捷地实现微信支付功能。 下面是一些可能有用的步骤: 1. 引入weixin-java-pay的依赖 在pom.xml文件中添加weixin-java-pay的依赖: ``` <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-pay</artifactId> <version>3.5.0</version> </dependency> ``` 2. 配置weixin-java-pay 在Spring Boot的配置文件中,添加weixin-java-pay的相关配置: ``` wxpay.appId=xxxxxxxxxx wxpay.mchId=xxxxxxxxxx wxpay.key=xxxxxxxxxx wxpay.certPath=classpath:cert/apiclient_cert.p12 wxpay.notifyUrl=https://example.com/pay/notify ``` 3. 创建微信支付服务类 创建一个服务类,负责调用weixin-java-pay的API实现微信支付功能: ``` @Service public class WeixinPayService { @Autowired private WxPayService wxPayService; public String createPayOrder(String openid, String body, String outTradeNo, int totalFee) throws WxPayException { WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); request.setOpenid(openid); request.setBody(body); request.setOutTradeNo(outTradeNo); request.setTotalFee(totalFee); request.setSpbillCreateIp("127.0.0.1"); request.setTradeType(WxPayConstants.TradeType.JSAPI); WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request); return result.getPrepayId(); } public Map<String, String> queryOrder(String outTradeNo) throws WxPayException { WxPayOrderQueryResult result = wxPayService.queryOrder(outTradeNo, null); Map<String, String> map = new HashMap<>(); map.put("trade_state", result.getTradeState()); return map; } public Map<String, String> closeOrder(String outTradeNo) throws WxPayException { WxPayOrderCloseResult result = wxPayService.closeOrder(outTradeNo); Map<String, String> map = new HashMap<>(); map.put("result_code", result.getResultCode()); return map; } } ``` 4. 创建支付控制器 创建一个控制器类,负责接收支付请求并调用微信支付服务类实现支付功能: ``` @RestController @RequestMapping("/pay") public class PayController { @Autowired private WeixinPayService weixinPayService; @PostMapping("/unifiedorder") public String unifiedorder(@RequestParam String openid, @RequestParam String body, @RequestParam String outTradeNo, @RequestParam int totalFee) throws WxPayException { String prepayId = weixinPayService.createPayOrder(openid, body, outTradeNo, totalFee); Map<String, String> map = new HashMap<>(); map.put("appId", wxPayService.getConfig().getAppId()); map.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000)); map.put("nonceStr", WxPayUtil.generateNonceStr()); map.put("package", "prepay_id=" + prepayId); map.put("signType", "MD5"); map.put("paySign", wxPayService.createSign(map)); return JSON.toJSONString(map); } @GetMapping("/queryorder") public Map<String, String> queryorder(@RequestParam String outTradeNo) throws WxPayException { return weixinPayService.queryOrder(outTradeNo); } @GetMapping("/closeorder") public Map<String, String> closeorder(@RequestParam String outTradeNo) throws WxPayException { return weixinPayService.closeOrder(outTradeNo); } } ``` 以上代码只是一个简单示例,实际上还需要根据具体业务需求进行修改和完善。 希望这些指导对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值