有个java算法题,求助大佬们

起灬風了 2019-04-24 10:31:36
将一段字符串按规则解析成多个预期类型的枚举值,请简述算法。

字符串分割符:1、分号 2、逗号

字符串示例:

"1123",'123',1,1.1,2.1,true,false,{"d":11},[1,2,3,4,5],${return '1'},<xml>12312</xml>,ere2342qweqwe1

这段字符串会解析成11个枚举值,类型解析规则如下:

1.双引号或者单引号括起来的会在java中解析成字符串

2.不区分大小写等于true或者false值,被解析成bool值

3.以{}括起来或者[]括起来的被解析成json对象

4.${}括起来的,被解析成groovy代码片段

5.以<{名称}></{名称}>括起来的解析成xml片段

6.以数字开头或者-开头且不包含小数点的被解析成长整形

7.以数字开头或者-开头且包含小数点的被解析成双精度浮点型

8.不满足以上条件且不包含分割符,全部解析成字符串



不满足以上解析规则的,抛错,提示用户具体一个片段解析异常
...全文
218 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdonghai 2019-04-25
  • 打赏
  • 举报
回复

package jp19042502;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class MyClass
{
private static Map<String, StringBuilder>ListMap=new HashMap<String, StringBuilder>();
private static String gString="\"1123\",'123',1,1.1,2.1,true,false,{\"d\":11},[1,2,3,4,5],${return '1'},<xml>12312</xml>,ere2342qweqwe1,$,-1,-3.5,01,02a,02a.,01.0";

private static String cT_STR="字符串";
private static String cT_BOOL="布尔";
private static String cT_JSON="JSON";
private static String cT_GRV="groovy";
private static String cT_XML="XML";
private static String cT_INT="长整形";
private static String cT_FLOAT="浮点型";
private static String cT_UNKNOWN="未知";

private static void splitStr()
{
ListMap.put(cT_STR, new StringBuilder());
ListMap.put(cT_BOOL, new StringBuilder());
ListMap.put(cT_JSON, new StringBuilder());
ListMap.put(cT_GRV, new StringBuilder());
ListMap.put(cT_XML, new StringBuilder());
ListMap.put(cT_INT, new StringBuilder());
ListMap.put(cT_FLOAT, new StringBuilder());
ListMap.put(cT_UNKNOWN, new StringBuilder());

ArrayList<String>list=new ArrayList<String>();

StringBuilder AFGStr=new StringBuilder(gString);
int len=AFGStr.length();
if(len<=0) return;
if(AFGStr.charAt(0)==',')
{
len--;
AFGStr.delete(0, 1);
}
if(AFGStr.charAt(len-1)!=',')
{
len++;
AFGStr.append(',');
}

int iB=1,iYH=0;
list.clear();
for(int i=0;i<len;i++)
{
char c=AFGStr.charAt(i);
if((c=='\"') | (c=='\'') | (c=='[')) iYH++;
if(c==']') iYH--;
if((c==',') & (iYH %2==0))
{
String sTmp=AFGStr.substring(iB-1, i);
if(sTmp.length()>0)
list.add(sTmp);

iB=i+2;
iYH=0;
}
}

for(String s:list)
{
if(s.length()<=0) continue;
String sType=cT_STR;
char c=s.charAt(0);
if((c=='\"') | (c=='\'')) sType=cT_STR;
else if ((c=='[') | (c=='{')) sType=cT_JSON;
else if (c=='$')
{
if(s.length()<=1) sType=cT_UNKNOWN;
else if (s.charAt(1)=='{') sType=cT_GRV;
}
else if (c=='<')
{
int k=s.indexOf('>');
if(k>0)
{
String sName=s.substring(1, k);
if (s.indexOf("</"+sName)>0) sType=cT_XML;
}
}
else if((c=='-') | ("0123456789".indexOf(c)>0))
{
if(s.indexOf('.')>0)
{
sType=cT_FLOAT;
try {
Float.valueOf(s);
}
catch(Exception e)
{
sType=cT_STR;
}
}
else {
sType=cT_INT;
try {
Integer.valueOf(s);
}
catch(Exception e)
{
sType=cT_STR;
}
}
}
else if ((s.toLowerCase().equals("true")) | (s.toLowerCase().equals("false"))) sType=cT_BOOL;
else sType=cT_UNKNOWN;

StringBuilder sb=ListMap.get(sType);
if(sb.length()>0) sb.append(",");
sb.append(s);
}

System.out.print(ListMap.toString());
}

public static void main(String[] args)
{
// TODO 自动生成的方法存根
splitStr();
}

}

起灬風了 2019-04-25
  • 打赏
  • 举报
回复
是的呢,不过ere2342qweqwe1这个是无法解析的
wdonghai 2019-04-25
  • 打赏
  • 举报
回复
输出结果是不是这样的:
字符串="1123",'123',ere2342qweqwe1
长整形=1
浮点型=1.1,2.1
布尔=true,false
JSON={"d":11},[1,2,3,4,5]
groovy=${return '1'}
XML=<xml>12312</xml>
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,并强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务分配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习并实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧