字符串里有数字和字符,如何只获取一种(以数字为例)

随便给你一个含有数字的字符串,比如:

String s="eert343dfg56756dtry66fggg89dfgf";

那我们如何把其中的数字提取出来呢?大致有以下几种方法,正则表达式,集合类,还有就是String类提供的方法。

1 String类提供的方法:

package 测试练习;
import java.util.*;
public class get_StringNum {

/**
 *2012.6.2
 */

public static void main(String[] args) {
String str = "love23next234csdn3423javaeye";
str=str.trim();
String str2="";
if(str != null && !"".equals(str)){
for(int i=0;i<str.length();i++){
if(str.charAt(i)>=48 && str.charAt(i)<=57){
str2+=str.charAt(i);
}
}

}
System.out.println(str2);
}

}

output:

232343423

这个方法有个明显的缺点,只能把数字全部提取到一起,不能分别提取。当然也可以改进,有兴趣的朋友可以试试。

2 正则表达式

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class get_StringNum {

/**
 *2012.6.2
 */

public static void main(String[] args) {
String a="love23next234csdn3423javaeye";
String regEx="[^0-9]";   
Pattern p = Pattern.compile(regEx);   
Matcher m = p.matcher(a);   
System.out.println( m.replaceAll("").trim());
}

}

output:

232343423

Pattern ,Matcher是java.util.regex软件包里的两个类,具体用法大家可以查阅一下api。同样也不能单个提取数字。

3 集合类库

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class get_StringNum {

/**
 *2012.6.2
 */

public static void main(String[] args) {
   String a="love23next234csdn3423javaeye";
List<String> digitList = new ArrayList<String>();
Pattern p = Pattern.compile("[^0-9]");
Matcher m = p.matcher(a);
String result = m.replaceAll("");
for (int i = 0; i < result.length(); i++) {
digitList.add(result.substring(i, i+1));

}
System.out.println(digitList);

}

}

output:

[2, 3, 2, 3, 4, 3, 4, 2, 3]

相同的思路:

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class get_StringNum {

/**
 *2012.6.2
 */

public static void main(String[] args) {
               String a="love23next234csdn3423javaeye";
        List<String> ss = new ArrayList<String>();
        for(String sss:s.replaceAll("[^0-9]", ",").split(",")){
            if (sss.length()>0)
                ss.add(sss);
        }
        System.out.print(ss);

}

}

output:

[2, 3, 2, 3, 4, 3, 4, 2, 3]

很明显,利用正则表达式我们就可以分别提取数字了。

另外还有一个利用查阅文档找出的答案,如下:

/**
* 从字符串文本中获得数字

*@param
text

*@return

*/

publicstatic
List<Long>
getDigit(String text) {

List<Long>
digitList =new
ArrayList<Long>();

Pattern p=
Pattern.compile("(\\d+)");

Matcher m=
p.matcher(text);

while
(m.find()) {

String find=
m.group(1).toString();

digitList.add(Long.valueOf(find));

}return
digitList;

}

两个用正则表达式匹配的判断方法,如下;

  1. // 判断一个字符串是否都为数字
  2. public boolean isDigit(String strNum) {
  3. return strNum.matches("[0-9]{1,}");
  4. }
  5. // 判断一个字符串是否都为数字
  6. public boolean isDigit(String strNum) {
  7. Pattern pattern = Pattern.compile("[0-9]{1,}");
  8. Matcher matcher = pattern.matcher((CharSequence) strNum);
  9. return matcher.matches();
  10. }
  11. //截取数字
  12. public String getNumbers(String content) {
  13. Pattern pattern = Pattern.compile("\\d+");
  14. Matcher matcher = pattern.matcher(content);
  15. while (matcher.find()) {
  16. return matcher.group(0);
  17. }
  18. return "";
  19. }
  20. // 截取非数字
  21. public String splitNotNumber(String content) {
  22. Pattern pattern = Pattern.compile("\\D+");
  23. Matcher matcher = pattern.matcher(content);
  24. while (matcher.find()) {
  25. return matcher.group(0);
  26. }
  27. return "";
  28. }

至此,关于从字符串中提取数字的文章就写到这,欢迎大家提意见。

时间: 2024-08-17 07:13:20

字符串里有数字和字符,如何只获取一种(以数字为例)的相关文章

华为 2015 机试 输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aabb55pin。

1 package 华为机试; 2 //C++ 输入:由数字和字母组成的字符串,例如:333aaabb55ppin 3 //输出:数字后面的连续出现的(2个或多个)相同字符(数字或者字符),删去一个,非数字后面的不要删除,例如,对应输出为:33aabb55pin. 4 5 //这句话的核心就是在字符串删除一些字符,感觉处理很复杂,删除哪些字符呢?我们观察发现, 本字符串中删除了一个3,一个a,一个p,满足的规则是啥呢? 333中删除最后一个3,3aa删除了一个a,5pp中删除一个p, 6 //规

一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数

当然如果这个问题是只有一个不同的数,其他数字成对相同,那么就是把所有数字异或就得出这个数了 这次是有两个只出现一次的数字,其他数字都成对相同 1)先把所有数都异或得到数t 2)算出t的二进制第一个1的位置flag 3)将所有数根据二进制flag位置是否为1分成两组b1[],b2[] (此时每组数字的个数一定是奇数) 4)将b1组异或得到ans1,将b2组异或得到ans2 #include<iostream> #include<stdio.h> using namespace std

自写的LastPos,寻找字符串里的最后一个字符,RTL里没有提供这个函数——Delphi的String下标是从1开始的

已经好几次了,没有这个函数还是感觉很不方便,所以自己写了一个: function LastPos(strFind :string; ch: Char): integer; var i, n: integer; begin Result := -1; if strFind='' then begin Exit; end; for i:=0 to Length(strFind) do begin if strFind[i]=ch then Result := i; end; end; procedu

找出数组中两个只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 还是理解不够深刻. 这题的主要思路还是之前的数组中只出现一次的数字的那种模式,一次遍历加上异或运算.那么这个异或的值肯定是这两个只出现一次的数字的相异或的值.那么这个值的二进制表现形式中的1的结果就表示这两个数字在该bit位上不一样.那么通过此举,我们可以以这个bit位是否为1来从整个数组中把这两个只出现一次的数字分开. 通过此举,别的出现两次的数字

剑指Offer--040-数组中只出现一次的数字

链接 牛客OJ:数组中只出现一次的数字 九度OJ:http://ac.jobdu.com/problem.php?pid=1351 GitHub代码: 040-数组中只出现一次的数字 CSDN题解:剑指Offer–040-数组中只出现一次的数字 牛客OJ 九度OJ CSDN题解 GitHub代码 040-数组中只出现一次的数字 1351-数组中只出现一次的数字 剑指Offer–040-数组中只出现一次的数字 040-数组中只出现一次的数字 题意 题目描述 一个整型数组里除了两个数字之外,其他的数

剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)

题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数组中的数字都异或,那么那些等的数字异或后都化为0,因此最后出现的不为0的数字就是两个只出现一次的数字他们两个异或的结果.我们找到该结果中的最右边的一个1,然后根据这个1将数组划分为两份. Java代码: //数组中只出现一次的数. //题目:数组中其他的数都是出现两次,有两个数只出现一次. publ

判断一个字符串里是否含有某段字符?怎么截取一段字符?

写前端过程中遇到的最多的字符串操作莫过于 :判断一个字符串里是否含有某段字符 ,和 截取一段字符串. 字符串操作有很多方法,其实一般只要掌握以上两个就够用了,其他方法随他去吧,好,下面就以上两个方法讲解一下. 1.判断一个字符串是否含有某段字符,使用indexOf()方法: str.indexOf("参数1","参数2");参数1表示判断是否包含的小字符串, 参数2表示从左到有依次判断的起始位置,默认从0开始,str表示用于寻找的原字符串,ps:如果原字符串含多个判

在字符串里寻找某字符出现的个数

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 字符串1 { class Program { static void Main(string[] args) { int n = 0; Console.WriteLine("请输入字符串:"); string B = Console.ReadLine(); B = B.ToLower(); if

LCD1602 显示数字,字符,自定义字符,字符串,光标

/******************************************* 程序名:   1602液晶屏时钟程序 编写时间: 2015年10月4日 硬件支持: LCD1602液晶屏  STC12C4052AD 外部12MHZ晶振  接线定义:  DB0_DB7 --> P1^0 --P1^7 RS   = P3 ^ 2;         RW   = P3 ^ 3;   E    = P3 ^ 4;   功能:测试LCD1602的显示,显示时间,http://990487026.b