最近看到一个有趣的问题,String str="abcd",如何使用正则得到str的所有字符,结果"a,b,c,d"。
不是很简单吗,上代码:
public static void errorMethodTest(String srcStr) { String[] strArr = srcStr.split(""); for (String str : strArr) { System.out.print(str + ","); } System.out.println(); }
结果为:
,a,b,c,d,
前面多了一个""。
如何正确的得到a,b,c,d呢?参考了博客http://www.coderanch.com/t/497299/java/java/Splitting-String-characters
正确方法为:
public static void strSplitMethodTest(String srcStr) { String[] strArr = srcStr.split("(?<!^)"); for (String s : strArr) { System.out.print(s + ","); } System.out.println(); }
或者
public static void strSplitMethod2Test(String srcStr) { String[] strArr = srcStr.split("(?!^)"); for (String str : strArr) { System.out.print(str + ","); } System.out.println(); }
上面的那玩意是什么呢?是正则表达式中的反向预查,正向预查,参考了博客http://my.oschina.net/lxpan/blog/27907
(?<=pattern) 反向匹配
(?<!pattern) 反向不匹配
(?=pattern) 正向匹配
(?!pattern) 正向不匹配
测试例子:
public static void myTest() { String testStr = "foreach eachfor forall allfor alleach eachall"; Pattern p = Pattern.compile("(?<!for)each");// 匹配任何前面不带有for的each Matcher match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } System.out.println("--------------------------------"); p = Pattern.compile("(?<=for)each");// 匹配任何前面带有for的each match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } System.out.println("-------------------------------"); p = Pattern.compile("for(?!each)");// 会匹配任何后面不是each的for match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } System.out.println("-------------------------------"); p = Pattern.compile("for(?=each)");// 会匹配任何后面是each的for match = p.matcher(testStr); while (match.find()) { System.out.println(match.group()); } }
结果为:
each each each -------------------------------- each ------------------------------- for for for ------------------------------- for
上面的不够直观,使用RegexBuddy软件结果如下:
不使用正则怎么做呢?
public static void strMethodTest(String srcStr) { char[] strArr = srcStr.toCharArray(); for (char c : strArr) { System.out.print(c + ","); } System.out.println(); }
全文完。
相关推荐
在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...
java 利用正则表达式从字符串中提取省、市、区、镇、乡等区域名称(包含少数民族地区),支持地址中无省,无市,无县情况。
### Java正则表达式判断字符串是否包含中文 在日常的软件开发过程中,我们经常会遇到需要对输入的字符串进行校验的情况。例如,在处理用户输入、文本分析或数据清洗时,可能需要判断一个字符串中是否包含中文字符。...
这里我们关注的是如何使用正则表达式来匹配所有包含在花括号 `{}` 中的字符串,并将其提取出来。这在处理模板引擎、编程语言语法解析或数据替换等场景中非常常见。 首先,我们需要了解Java中处理正则表达式的相关类...
本文将详细介绍如何使用Java正则表达式进行字符串替换,并通过具体的代码示例来展示其实现过程。 #### 二、基础知识 ##### 1. 正则表达式简介 正则表达式(Regular Expression),通常被简称为regex或regexp,是一...
本篇将深入探讨Java中的字符串、正则表达式及其在实际编程中的详细实例代码。 1. **字符串基础** - Java中的字符串是不可变的,这意味着一旦创建了字符串对象,就不能更改其内容。这由`final`关键字确保,提高了...
Java使用正则表达式提取XML节点内容的方法示例主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作技巧。 一、正则表达式简介 正则表达式是指一...
在本教程中,我们将深入探讨如何使用正则表达式来拆分字符串,这对于数据处理和文本分析尤其有用。下面将详细阐述正则表达式的概念、语法以及如何在不同编程语言中实现字符串的拆分。 1. 正则表达式基础 - **模式...
根据java正则表达式生成一个随机的字符串,具体可以去一下网站看:https://code.google.com/p/xeger/
本文将详细介绍如何使用Java正则表达式提取字符串中的特定字符。 首先,了解什么是正则表达式是非常有必要的。正则表达式(Regular Expression)是一种特殊字符序列,用于匹配一组字符串。在Java中,通过java.util....
其中包括5个类,这5个类的代码基本概括了java正则表达式替换String的多种情况,比如获取某个文件路径中盘符/后边的部分内容,提取"<title>XXXX</title>"中的文字XXXX,用正则表达式获取指定字符串内容中的指定内容,...
2. java正则表达式的使用:java使用正则表达式可以实现手机号的匹配操作。正则表达式可以定义模式来匹配字符串,例如,"^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"这个正则表达式可以匹配大多数的手机号码。 3...
将已知字符串的符合一定规则(指定正则)的子字符串取出(步骤笔记)
在 Java 中,使用正则表达式对象可以实现各种字符串匹配和提取操作。正则表达式对象主要通过 Pattern 和 Matcher 两个类来实现。下面详细介绍如何使用正则表达式对象实现正则获取功能。 一、基本概念 在使用正则...
之前一个朋友问我,如何判断字符串中是否包含中文,其实解决的方法很简单,但觉着有必要写出给不知道的朋友们以参考,所以下面这篇文章主要介绍了利用Java正则表达式判断字符串中是否包含中文的方法,需要的朋友可以...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...
Java中的字符串匹配功能强大且灵活,尤其是当结合正则表达式使用时。正则表达式是一种强大的文本处理工具,允许我们以一种简洁的方式定义复杂的搜索模式。在Java中,`java.util.regex` 包提供了对正则表达式的支持,...
在Java编程中,验证字符串是否符合JSON(JavaScript Object Notation)格式是一项常见的任务,尤其是在进行前后端数据交互时。JSON是一种轻量级的数据交换格式,它允许数据以键值对的形式存储,易于人阅读和编写,...
本篇文章将详细讲解如何利用Java的正则表达式功能来从字符串中提取数字,特别是在短信验证码提取场景中的应用。 首先,我们需要理解正则表达式的概念。正则表达式是由特殊字符和普通字符组成的字符串,它定义了一种...