java string sscanf_倾情奉献——JAVA sscanf函数!!!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/**
*
* @param input
* 输入字符串
* @param format
* 格式字符串
* @param export
* 输出
* @return
*/
public static boolean sscanf(String input, String format, @SuppressWarnings("rawtypes") Collection export) {
if (format.indexOf('%') < 0) {
return false;
}
// 分解格式
List subFormats = new ArrayList<>();
if (!resolveFormatString(subFormats, format)) {
return false;
}
// 解析输入
if (!resolveInputString(subFormats, format, export, input)) {
return false;
}
return true;
}
@SuppressWarnings("unchecked")
private static boolean resolveInputString(List subFormats, String format,
@SuppressWarnings("rawtypes") Collection export, String input) {
StringWriter writer = null;
for (int formatIndex = 0, inputIndex = 0; formatIndex < subFormats.size(); ++formatIndex) {
String subFormat = subFormats.get(formatIndex);
if ("%d".equals(subFormat) || "%l".equals(subFormat)) {
for (; inputIndex < input.length(); ++inputIndex) {
char c = input.charAt(inputIndex);
if ('9' < c || '0' > c) {
if (writer == null) {
continue;
} else {
break;
}
} else {
if (writer == null) {
writer = new StringWriter(input.length());
}
writer.append(c);
}
}
long integer = Long.parseLong(writer.toString());
writer = null;
export.add(integer);
} else if ("%f".equals(subFormat)) {
int dotCount = 0;
for (; inputIndex < input.length(); ++inputIndex) {
char c = input.charAt(inputIndex);
if (c == '.') {
++dotCount;
}
if (dotCount > 1) {
break;
}
if (('9' < c || '0' > c) && '.' != c) {
if (writer == null) {
continue;
} else {
break;
}
} else {
if (writer == null) {
writer = new StringWriter(input.length());
}
writer.append(c);
}
}
double integer = Double.parseDouble(writer.toString());
writer = null;
export.add(integer);
} else if ("%c".equals(subFormat)) {
char c = input.charAt(inputIndex);
export.add(c);
++inputIndex;
} else if ("%s".equals(subFormat)) {
if (formatIndex >= subFormats.size() - 1) {
export.add(input.substring(inputIndex));
inputIndex = input.length();
continue;
}
String subFormat2 = subFormats.get(formatIndex + 1);
if ("%d".equals(subFormat2) || "%l".equals(subFormat2)) {
for (; inputIndex < input.length(); ++inputIndex) {
char c = input.charAt(inputIndex);
if (writer == null) {
writer = new StringWriter(input.length());
}
if ('9' < c || '0' > c) {
writer.append(c);
} else {
break;
}
}
export.add(writer.toString());
writer = null;
} else if ("%f".equals(subFormat2)) {
for (; inputIndex < input.length(); ++inputIndex) {
char c = input.charAt(inputIndex);
if (writer == null) {
writer = new StringWriter(input.length());
}
if (('9' < c || '0' > c) && '.' != c) {
writer.append(c);
} else {
break;
}
}
export.add(writer.toString());
writer = null;
} else if ("%s".equals(subFormat2) || "%c".equals(subFormat2)) {
return false;
} else {
int nextInputIndex = input.indexOf(subFormat2, inputIndex);
String skipString = input.substring(inputIndex, nextInputIndex);
inputIndex = nextInputIndex + subFormat2.length();
export.add(skipString);
++formatIndex;
}
} else {
inputIndex = input.indexOf(subFormat, inputIndex) + subFormat.length();
}
}
return true;
}
private static boolean resolveFormatString(List subFormats, String format) {
// 分解格式
StringWriter writer = null;
for (int index = 0; index < format.length(); ++index) {
char c = format.charAt(index);
// 普通字符
if (c != '%') {
if (writer != null) {
subFormats.add(writer.toString());
}
writer = new StringWriter(format.length());
writer.append(c);
continue;
}
// 结束判定
if (index == format.length() - 1) {
writer.append(c);
break;
}
// 下一个字符
++index;
char c2 = format.charAt(index);
// 发现%
if (c2 == '%') {
writer.append(c);
continue;
}
// 格式判定
if ("dflsc".indexOf(c2) < 0) {
return false;
}
if (writer != null) {
subFormats.add(writer.toString());
}
writer = new StringWriter(format.length());
writer.append(c);
writer.append(c2);
}
if (writer != null) {
subFormats.add(writer.toString());
}
return true;
}
java string sscanf_倾情奉献——JAVA sscanf函数!!!相关推荐
- java sscanf_倾情奉献——JAVA sscanf函数!!!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /** * * @param input * 输入字符串 * @param format * 格式字符串 * @param export * 输出 * @ ...
- Java String到int,Java int到String
Today we will look at Java String to int conversion and then java int to String conversion. Java pro ...
- java sscanf_【转】sscanf函数用法实例
sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ...
- java string string_深入理解Java:String
在讲解String之前,我们先了解一下Java的内存结构. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两 ...
- java string to uuid_在JAVA中生成UUID字符串的有效方法(不带破折号的UUID.randomUUID()。toString())...
小编典典 最终基于UUID.java实现编写了自己的东西.请注意,我 并不是在生成UUID ,而是以我能想到的最有效的方式 生成一个 随机的32字节十六进制字符串. 实作 import java.se ...
- Java String的intern方法
1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...
- Java String的API方法总结
1.String对象的简单方法 String的简单方法包括获取字符串的长度,从字符串中获取字符,连接字符串,转换字符串大小写. 代码展示如下所示: package com.demo01; public ...
- java string 转boolean_Java String转boolean
Java String转boolean 1 Java String转boolean的介绍 我们可以使用Boolean.parseBoolean(string) 方法在Java中将String转换为bo ...
- java 进程运行时间_将Java类作为子进程运行
java 进程运行时间 我本周需要将Java类(而不是jar)作为子进程运行. 更确切地说,我想从测试内部产生一个新进程,而不是直接在测试内部(进程内)运行它. 我不认为这是幻想或复杂的事情. 但是, ...
最新文章
- C++ static
- angular5 ng-content使用方法
- wamp下Apache2.4.x局域网访问403的解决办法
- 数据结构之判断一棵树是不是完满二叉树
- echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图
- [react] React为什么不要直接修改state?如果想修改怎么做?
- 【转载】MongoDB基本操作
- mysql mgr监控_说MGR - MGR的监控
- Ajax程序设计入门
- js拼接json对象_JS实现合并json对象的方法
- Linux下C语言开发(多任务编程之任务、进程、线程)
- Android开发——小技巧(二)修改APP图标和名字
- Spring入门学习
- 手把手教你写网络爬虫:Web应用的漏洞检测实战篇!
- CSS3动画实践——简易牛顿摆
- [论文笔记] Balboa: Bobbing and Weaving around Network Censorship
- C. Good Subarrays
- 仿抖音写上下滑动切换视频
- 科技爱好者周刊(第 114 期):U 盘化生存和 Uber-job
- 深度学习和神经网络的介绍(一)