有这样一串字符串:String s = "共 100 页, 1 2 3 4...";

假如我想把"100"给取出来,该如何做?

方法一: 采用split的方式

System.out.println(s.split(" ")[1]);或者System.out.println(s.split("\\s")[1]);

假如空" "有多个时,可以这样:
System.out.println(s.split("\\s+")[1]);

注:split是支持正则的,\s在正则中表示空格,+在正则中表示至少1个,即1个或多个,所以\s+表示至少有一个空格

方法二: 采用indexOf的方式

int begin = s.indexOf(" ");
int end = s.indexOf(" ", begin+1);
System.out.println(s.substring(begin+1, end));

方法三: 正则

封装好的一个正则类:

public class RegExp {

	public boolean match(String reg, String str) {
return Pattern.matches(reg, str);
} public List<String> find(String reg, String str) {
Matcher matcher = Pattern.compile(reg).matcher(str);
List<String> list = new ArrayList<String>();
while (matcher.find()) {
list.add(matcher.group());
}
return list;
} public String find(String reg, String str, int index) {
Matcher matcher = Pattern.compile(reg).matcher(str);
if (matcher.find()) {
return matcher.group(index);
}
return null;
} public String findString(String reg, String str) {
String returnStr = null;
List<String> list = this.find(reg, str);
if (list.size() != 0)
returnStr = list.get(0);
return returnStr;
} }

RegExp re = new RegExp();
 System.out.println(re.findString("\\d+", s));

System.out.println(re.findString("(?<=共).*?\\d+", s).trim());

注:正则中\d表示数字,(?<=共)是一种预查模式

方法四: 采用replaceFirst的方式

System.out.println(s.replaceFirst(".*?(\\d+).*", "$1"));

replaceFirst也是支持正则的

注: ?在正则中表示最小匹配模式,$1表示第一个()表示式里面的内容。

以上四种方法中,其中有三种都与正则有关系,所以,要想玩转字符串的操作,具备一定的正则表示式的能力还是很有必要的!

JAVA中取子字符串的几种方式的更多相关文章

  1. Java中构建长字符串的四种模式

    回字有四种写法,构建字符串也有四种方式. 用+号最快,第二第三种可读性好,第四种是log4j自有的.下面请见代码: package logbackCfg; import java.text.Messa ...

  2. java 中创建线程有哪几种方式?

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...

  3. java中线程池创建的几种方式

    java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize ...

  4. Java中 实现多线程成的三种方式(继承,实现,匿名内部类)

    ---------------------------------------------------------------------------------------------------- ...

  5. Java中创建实例化对象的几种方式

    Java中创建实例化对象有哪些方式? ①最常见的创建对象方法,使用new语句创建一个对象.②通过工厂方法返回对象,例:String s =String.valueOf().(工厂方法涉及到框架)③动用 ...

  6. Java中从控制台输入的三种方式

    我们最熟悉的从控制台读取一个字符或者一个字符串都知道用Scanner,那么除了Scanner还有没有其他的呢,答案是有的,我们来看看. System.in.read() System.in.read( ...

  7. 总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  8. Java中 单例(Singleton)的两种方式

    第一种(饿汉式单例模式):在声明变量时实例化 public class Singleton { //静态初始化自动实例化 private static Singleton instance = new ...

  9. Java 中初始化 List 集合的 6 种方式!

    List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 1.常规方式 List<String> ...

随机推荐

  1. Oracle 游标使用

    今天看到一篇很帮的游标,所以强烈转一下 http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html -- 声明游标:CURSOR curs ...

  2. 文件与base64二进制转换

    /// <summary> /// 文件转换为Base64二进制流 /// </summary> /// <param name="FilePath" ...

  3. centos 安装flash插件

    方法一: 1.选择合适的yum源http://get.adobe.com/cn/flashplayer/进入此网址选择 “YUM,适用于Linux(YUM)”,下载adobe源http://101.9 ...

  4. CSS3 线性渐变(linear-gradient) 兼容IE8,IE9

    一.线性渐变在 Mozilla 下的应用     语法: -moz-linear-gradient( [<point> || <angle>,]? <stop>, ...

  5. 详解 Windows 8.1 下的按流量计费的使用

    用过 Windows 8 ,而且用过手机热点的同学应该都不陌生,Windows 会自动识别这个Wifi是按流量计费的.然后会限制流量. 在正式说怎么用之前,我们先啦讨论一下按流量计费网络. 有线网络无 ...

  6. Android 开发必备

    Android 开发必备 http://www.androiddevtools.cn/ 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——03

    2013-08-17 17:31:49 1.7 分用 分用(Demultiplexing):这是一个过程——当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议上的报文首 ...

  8. Unix常用指令

    pwd 表示获取自己当前所在位置 ls 表示查看当前文件夹中的内容 cd 进入指定目录 mkdir  文件夹1 创建一个文件夹名为文件夹1的文件夹 rmdir  文件夹2 删除一个文件夹名为文件夹2的 ...

  9. Nginx代理与负载均衡配置与优化

    Nginx代理 Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反 ...

  10. (转)【ASP.NET Web API】Authentication with OWIN

    概述 本文说明了如何使用 OWIN 来实现 ASP.NET Web API 的验证功能,以及在客户端与服务器的交互过程中,避免重复提交用户名和密码的机制. 客户端可以分为两类: JavaScript: ...