该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/**

*

* @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函数!!!相关推荐

  1. java sscanf_倾情奉献——JAVA sscanf函数!!!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /** * * @param input * 输入字符串 * @param format * 格式字符串 * @param export * 输出 * @ ...

  2. 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 ...

  3. java sscanf_【转】sscanf函数用法实例

    sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ...

  4. java string string_深入理解Java:String

    在讲解String之前,我们先了解一下Java的内存结构. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两 ...

  5. java string to uuid_在JAVA中生成UUID字符串的有效方法(不带破折号的UUID.randomUUID()。toString())...

    小编典典 最终基于UUID.java实现编写了自己的东西.请注意,我 并不是在生成UUID ,而是以我能想到的最有效的方式 生成一个 随机的32字节十六进制字符串. 实作 import java.se ...

  6. Java String的intern方法

    1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...

  7. Java String的API方法总结

    1.String对象的简单方法 String的简单方法包括获取字符串的长度,从字符串中获取字符,连接字符串,转换字符串大小写. 代码展示如下所示: package com.demo01; public ...

  8. java string 转boolean_Java String转boolean

    Java String转boolean 1 Java String转boolean的介绍 我们可以使用Boolean.parseBoolean(string) 方法在Java中将String转换为bo ...

  9. java 进程运行时间_将Java类作为子进程运行

    java 进程运行时间 我本周需要将Java类(而不是jar)作为子进程运行. 更确切地说,我想从测试内部产生一个新进程,而不是直接在测试内部(进程内)运行它. 我不认为这是幻想或复杂的事情. 但是, ...

最新文章

  1. C++ static
  2. angular5 ng-content使用方法
  3. wamp下Apache2.4.x局域网访问403的解决办法
  4. 数据结构之判断一棵树是不是完满二叉树
  5. echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图
  6. [react] React为什么不要直接修改state?如果想修改怎么做?
  7. 【转载】MongoDB基本操作
  8. mysql mgr监控_说MGR - MGR的监控
  9. Ajax程序设计入门
  10. js拼接json对象_JS实现合并json对象的方法
  11. Linux下C语言开发(多任务编程之任务、进程、线程)
  12. Android开发——小技巧(二)修改APP图标和名字
  13. Spring入门学习
  14. 手把手教你写网络爬虫:Web应用的漏洞检测实战篇!
  15. CSS3动画实践——简易牛顿摆
  16. [论文笔记] Balboa: Bobbing and Weaving around Network Censorship
  17. C. Good Subarrays
  18. 仿抖音写上下滑动切换视频
  19. 科技爱好者周刊(第 114 期):U 盘化生存和 Uber-job
  20. 深度学习和神经网络的介绍(一)

热门文章

  1. 【Python】政府工作报告词云
  2. C 语言实例 - 判断三边能否构成三角形
  3. projecteuler_2020更新:#ProjectEuler100和#AWSCertified挑战
  4. sass导入sass_如何使用Sass Mixins和Loops
  5. 数据科学家 数据工程师_发展数据科学家和工程师
  6. ubuntu下安装golang环境
  7. Linux——vi编辑器
  8. C# Socket多线程编程实例
  9. 漫步微积分一 —— 引言
  10. leetcode链表篇