package com.zte.xh.fund.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.jfinal.plugin.activerecord.Record;
import com.mysql.jdbc.StringUtils;
import com.zte.xh.fund.model.FundFinance;
/**
* 对账的工具类
*
* @author Jay_Lee
*
*/
public class CheckoutUtil {
/**
* 匹配出字符串中的6,8,10位Id
*
* @param str
* @return
*/
public static String matchId(String str) {
// 匹配6,8,10位的工号
String regEx = null;
Pattern p = null;
Matcher m = null;
String result = null;
// 首先匹配10位的
regEx = "[0-9]{10}";
p = Pattern.compile(regEx);
m = p.matcher(str);
while (m.find()) {
result = m.group();
}
// 如果10位的为空就匹配8位的
if (StringUtils.isNullOrEmpty(result)) {
regEx = "[0-9]{8}";
p = Pattern.compile(regEx);
m = p.matcher(str);
while (m.find()) {
result = m.group();
}
}
// 如果8位为空,就匹配6位
if (StringUtils.isNullOrEmpty(result)) {
regEx = "[0-9]{6}";
p = Pattern.compile(regEx);
m = p.matcher(str);
while (m.find()) {
result = m.group();
}
// 6位的工号,在第1位后面加2个0,补齐成新工号
if (!StringUtils.isNullOrEmpty(result)) {
String start = result.substring(0, 1);
String end = result.substring(1, result.length());
result = start + "00" + end;
}
}
return StringUtils.isNullOrEmpty(result) ? "" : result;
}
/**
* 发现相同的工号,便于合并
*
* @param records
* @return
*/
public static List<List<Integer>> findRepeat(List<Record> records) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
String demp = "";
for (int i = 0; i < records.size(); i++) {
String[] demps = demp.split(",");
if (breakFor(demps, i)) {
continue;
}
List<Integer> result_ = new ArrayList<Integer>();
String startTemp = records.get(i).get("userId");
if (startTemp == null || startTemp.length() <= 0) {
continue;
}
result_.add(i);
for (int j = i + 1; j < records.size(); j++) {
if (breakFor(demps, j)) {
continue;
}
String endTemp = records.get(j).get("userId");
if (startTemp.equals(endTemp)) {
result_.add(j);
demp += (j + ",");
}
}
if (result_.size() > 1) {
result.add(result_);
}
}
return result;
}
/**
* 验证数组中是否包含了某个数据
*
* @param strs
* @param i
* @return
*/
public static boolean breakFor(String[] strs, int i) {
for (String s : strs) {
if (s.equals(String.valueOf(i))) {
return true;
}
}
return false;
}
/**
* 把list转换成string,string的形式
*
* @param list
* @return
*/
public static String listToString(List<?> list) {
String result = "";
for (Object str : list) {
result += String.valueOf(str) + ",";
}
result = result.substring(0, result.length() - 1);
return result;
}
/**
* 算出map对应的value的和
*
* @param map
* @return
*/
public static String getAccount(Map<Integer, String> map) {
double d = 0;
for (Entry<Integer, String> entry : map.entrySet()) {
d += Double.valueOf(StringUtils.isNullOrEmpty(entry.getValue())?"0":entry.getValue());
}
return String.valueOf(d);
}
/**
* 格式化金额。把20000.00按照万为单位格式化为2
*
* @param money
* @return
*/
public static String formatMoney(String money) {
int i = money.indexOf(".");//i=-1表示不存在
String result = null;
if(i!=-1){
result = money.substring(0, money.indexOf("."));
if(result.equals("0")){
result = "0";
}else{
result=result.substring(0, result.length() - 4);
}
}else{
if(money.equals("0")){
result = "0";
}else{
result = money.substring(0, money.length() - 4);
}
}
return result;
}
/**
* 初始化fund,因为数据库表不能为null,在此做共有的初始化
*/
public static void initFund(FundFinance fFinance){
fFinance.set("user_name", "");
fFinance.set("cert_id", "");
fFinance.set("tel", "");
fFinance.set("count", 0);
fFinance.set("k_name", "");
fFinance.set("bank_name", "");
fFinance.set("bank_num", "");
// 3表示已提交登记
fFinance.set("status", "3");
// 下面的都不知道是什么.又不能为空
fFinance.set("add_time", System.currentTimeMillis());
fFinance.set("s_time", "");
fFinance.set("shenming", "");
fFinance.set("z_name", "");
fFinance.set("his_shouyi", 0);
fFinance.set("z_num", "");
fFinance.set("images", "");
fFinance.set("images2", "");
fFinance.set("user_pay_time", 0);
fFinance.set("pay_message", "");
fFinance.set("sure_info", "");
fFinance.set("p_beizhu", "");
fFinance.set("cancel_time", 0);
fFinance.set("cancel_info", "");
fFinance.set("update_time", 0);
fFinance.set("update_info", "");
fFinance.set("s_time", 0);
}
/**
* 测试方法
*
* @param args
*/
public static void main(String[] args) {
/*
* String test = "行内汇入 001娄卫华 娄卫华 +123456+ 爱心理财"; List<Integer> testL =
* new ArrayList<Integer>(); testL.add(1); testL.add(2); testL.add(3);
* testL.add(5); Map<Integer, String> map = new HashMap<Integer,
* String>(); map.put(1, "30000.0"); map.put(2, "50000.0"); map.put(3,
* "30000.0"); System.out.println(getAccount(map));
* System.out.println(listToString(testL));
* System.out.println(matchId(test));
*/
/* String s = "11111,11111,";
s = s.substring(0,s.length()-1);
System.out.println(s);*/
System.out.println(formatMoney("200000"));
}
}
分享到:
相关推荐
"在字符串中找出连续最长的数字串并输出最长的字符串长度"这个问题是字符串处理中的一个经典实例,它涉及到字符串遍历、模式匹配和动态规划等概念。 首先,我们需要理解问题的核心:在给定的字符串中寻找连续的数字...
本示例的主题是“将数字从字符串中提取”,这是一个常见的需求,特别是在数据分析、文本处理或日志分析等场景。以下我们将深入探讨如何实现这个功能,并结合源码进行讨论。 首先,我们要了解字符串的基本操作。在...
第二种方法是利用正则表达式来匹配和提取字符串中的数字。这种方法更加简洁且易于理解,适用于复杂的匹配场景。 #### 2. 实现步骤 - 使用`Regex`类的`Matches`方法匹配所有数字。 - 将匹配到的数字组合成一个新的...
如果字符串中的数字连续且无其他干扰字符,自定义逻辑可能更为简单;而如果字符串中数字的格式复杂,包含多种可能的情况,那么正则表达式会更强大、灵活。 在提供的压缩包文件中,"从一串字符中取数字函数"可能是...
在使用Python正则表达式来匹配字符串中的数字时,“\d+”能够匹配文本中所有连续的数字序列,但包括那些与非数字字符混合的部分。而“r"\b\d+\b"”则能够仅匹配独立的纯数字序列,避免将非数字字符包含进来。在编写...
1. **方法调用**: 方法接受一个字符串参数`pString`并返回该字符串中找到的IP地址。 2. **正则替换**: 使用`replaceAll`方法来应用正则表达式,并通过`$1`引用匹配到的第一个捕获组,即IP地址本身。 3. **条件判断**...
题目要求实现一个程序,能够在一个给定的字符串中找到所有连续的数字序列,并最终输出最长的连续数字串。 #### 题目分析 题目中的示例代码提供了一个基础的解决方案,但存在一些问题需要改进和完善: 1. **正则...
通过调用`matcher.find()`,我们可以遍历字符串中所有匹配的数字,并使用`matcher.group()`获取当前匹配的数字。 此外,我们还可以使用`replaceAll`方法替换所有匹配的数字,或者使用`split`方法根据数字分割字符串...
在C#编程语言中,处理字符串是常见的任务之一,其中包括删除字符串中的特定部分或子字符串。本篇文章将详细探讨如何在C#中实现这一功能,包括多种方法和实用技巧。 首先,C#提供了多种内置方法来操作字符串,比如`...
1. **正则表达式概述**:正则表达式(Regular Expression)是一种描述字符串模式的语言,它由一系列元字符和操作符组成,用于在文本中查找、替换或提取特定格式的字符串。正确构建正则表达式是其有效性的关键,错误...
4. 使用`Matcher`对象`m`来匹配字符串`str`中的模式。 5. 在`while`循环中,通过调用`m.find()`方法来查找所有匹配的子串。每次找到匹配时,都会调用`m.group().subSequence(0, 1)`获取第一个匹配的字符,并将其添加...
在上面的代码中,`pattern` 是一个 `RegExp` 对象,它匹配任何包含连续6个数字的字符串。`test()` 方法将测试字符串 `str` 是否匹配该正则表达式。如果匹配,返回 `true`,否则返回 `false`。 使用 JavaScript 函数...
如果正则表达式模式更具体一些,例如$pattern="abc(\d{3})",那么PowerShell不仅会匹配字符串中任何连续的三个数字,还会考虑它们前面是否有一个"abc"前缀。在这种情况下,$matches[0]会包含整个匹配的字符串"abc123...
正则表达式是一种强大的模式匹配工具,能够处理复杂的查找和替换需求,例如匹配连续数字、邮箱地址等。 在实际使用过程中,用户可能需要通过一个简洁的用户界面(UI)输入要查找和替换的字符串,以及选择相应的选项...
当需要从字符串中提取数字时,正则表达式是首选的方法之一。本篇文章将详细讲解如何使用Java和正则表达式来获取字符串中的数字。 首先,我们需要了解Java中的`java.util.regex`包,这个包提供了`Pattern`和`Matcher...
在`NumberSearcher`类中,`findSingleDigit`函数可以遍历字符串,检查每个字符是否与目标数字字符匹配。可以使用`std::string::find_first_of`或`std::string::find_last_of`来查找特定字符。而`findNumber`函数则...
如果找到了匹配项,则返回子字符串的第一个字符在当前字符串中的索引位置;如果没有找到,则返回 -1。 #### 2.2 参数说明 `indexOf()` 方法可以接受一个或两个参数: - **单参数**:`indexOf(String str)` - 只提供...
1. **正则表达式**:正则表达式是用于匹配字符串模式的强大工具。在这个例子中,`/[^0-9]/ig` 的含义如下: - `[^0-9]` 表示匹配任何不是数字(0到9)的字符。`^` 在方括号内表示否定匹配。 - `/i` 是修饰符,表示...
- **子字符串**:是原字符串中的连续字符序列。 #### 2.2 .substring() 方法 `.substring()` 是 Java 和其他许多编程语言中提供的内置方法之一,用于从字符串中截取出子字符串。其基本语法为: ```java String ...