转载请注明出处:

  给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

  有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

  示例 1:

    输入: "()"
    输出: true
  示例 2:

    输入: "()[]{}"
    输出: true
  示例 3:

    输入: "(]"
    输出: false
  示例 4:

    输入: "([)]"
    输出: false
  示例 5:

    输入: "{[]}"
    输出: true

用两种方法实现:

  

 1 import java.util.HashMap;
2 import java.util.Map;
3 import java.util.Stack;
4
5 /**
6 * 判断有效字符串
7 */
8 public class EffectiveString {
9 /**
10 * 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
11 * <p>
12 * 有效字符串需满足:
13 * <p>
14 * 左括号必须用相同类型的右括号闭合。
15 * 左括号必须以正确的顺序闭合。
16 * 注意空字符串可被认为是有效字符串。
17 *
18 * @param args
19 */
20 public static void main(String[] args) {
21 // 字符串有效时,两个特殊符号进行相互的匹配
22 boolean result1 = isValid1("()[]{}");
23 System.out.println(result1);
24 boolean result2 = isValid2("()[]{}");
25 System.out.println(result2);
26 }
27
28 public static boolean isValid1(String testStr) {
29 testStr = testStr.replaceAll("\\(\\)", "");
30 testStr = testStr.replaceAll("\\[\\]", "");
31 testStr = testStr.replaceAll("\\{\\}", "");
32 System.out.println(testStr);
33 char[] charArr = {'(', ')', '{', '}', '[', ']'};
34 for (int i = 0; i < charArr.length; i++) {
35 int num = testStr.indexOf(charArr[i]);
36 System.out.println(num);
37 if (num > 0) {
38 return false;
39 }
40 }
41 return true;
42 }
43
44 public static boolean isValid2(String str) {
45 Stack<Character> stack = new Stack<>();
46 Map<Character, Character> symbolMap = new HashMap<>();
47 symbolMap.put(']', '[');
48 symbolMap.put(')', '(');
49 symbolMap.put('}', '{');
50 char[] charArray = str.toCharArray();
51 for (int i = 0; i < charArray.length; i++) {
52 if (charArray[i] == '[' || charArray[i] == '(' || charArray[i] == '{') {
53 stack.push(charArray[i]);
54 } else {
55 Character value = symbolMap.get(charArray[i]);
56 if (stack.isEmpty()) {
57 return false;
58 }
59 if (value != stack.pop()) {
60 return false;
61 }
62 }
63 }
64 System.out.println(stack);
65 return stack.isEmpty();
66 }
67
68 }

  

Java 有效字符串判断的更多相关文章

  1. java String字符串判断

    判断空字符串:StringUtils.isBlank StringUtils.isBlank(null) = true StringUtils.isBlank("") = true ...

  2. java中字符串的非空判断

    问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...

  3. Java空字符串与null的区别和判断字符串是否为空的方法

    Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...

  4. Java 中字两个字符串判断是否相等(转载)

    java中判断字符串是否相等有两种方法:1.用"=="运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b=&q ...

  5. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  6. Java:字符串类String的功能介绍

    在java中,字符串是一个比较常用的类,因为代码中基本上处理的很多数据都是字符串类型的,因此,掌握字符串类的具体用法显得很重要了. 它的主要功能有如下几种:获取.判断.转换.替换.切割.字串的获取.大 ...

  7. Java入门篇(五)——Java的字符串/String类

    前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...

  8. java 二进制数字符串转换工具类

    java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...

  9. Java进阶(二十一)java 空字符串与null区别

    java 空字符串与null区别 1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串, ...

  10. 由一篇吐槽对String空字符串判断的文章所引发的碎碎念

    一.起因 最近有篇关于String空字符串判断的文章火了,老是看到这篇文章,既然如此我也只好认真看了下:程序员晒出一段代码引来无数网友狂喷!网友:你就活该当码农! 我也觉得这段代码写的不怎么的,首先程 ...

随机推荐

  1. 【Postman&JMeter】使用Postman和JMeter进行signature签名

    使用Postman和JMeter进行signature签名 目录 使用Postman和JMeter进行signature签名 一.前言 二.v0接口 1.Postman 2.JMeter 三.v1接口 ...

  2. 玩转Spring状态机

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍Spring状态机之前,让我们来看看设计模式中的状态模式. 1 ...

  3. MySQL 数据目录

    MySQL 的数据目录 1. MySQL 的主要目录结构 方式1:通过命令搜索 find / -name mysql 方式2(推荐):通过查看配置文件获取目录结构 vim /etc/my.cnf (重 ...

  4. iMessage群发,iMessage群发功能,iMessage群发功能设计,iMessage群发系统

    在数字通讯时代,群发消息已经成为我们日常生活中不可或缺的一部分,无论是商务.社交还是日常沟通,群发功能都大大提高了消息传递的效率和便利性. 而在众多的通讯软件中,iMessage无疑是其中的佼佼者,今 ...

  5. 踩坑ffmpeg录制的mp4无法在浏览器上播放

    前言 使用ffmpeg编译好的程序在电脑上进行音视频转换,可以参考这篇:<windows电脑FFmpeg安装教程手把手详解_windows安装ffmpeg>,而我们要做的是在游戏引擎中集成 ...

  6. SQLServer清空数据库日志

    -------SQl2008以上 清空日志-------- USE[master] GO ALTER DATABASE [数据库名称] SET RECOVERY SIMPLE WITH NO_WAIT ...

  7. springboot整合apollo配置中心

    springboot整合apollo配置中心 springboot整合apollo配置中心官网文档说明得比较清楚,但还是有一些坑注意的. 官网文档:https://www.apolloconfig.c ...

  8. ChatGPT的中转站 oupuapi,不扶墙也能上楼

    我们在建类似 chatgpt 聊天站点的时候,只需对服务器进行扶墙代理,便可实现访问. 那么我们只需要往深里想一下,不要让整个服务器去访问 VPN,而是基于 API 的代理,或者说 API 的中转站也 ...

  9. Feign传递参数

    传递单个参数 1客户端 @RequestMapping("/one") public BaseResp one(@RequestParam("id") Inte ...

  10. 华为云应用服务网格最佳实践之从Spring Cloud 到 Istio

    摘要:在全球首届社区峰会IstioCon 2021中,华为云应用服务网格首席架构师张超盟发表了<Best practice:from Spring Cloud to Istio>主题演讲, ...