-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
// const jstr = 'Ljava/util/Map<Ljava/util/Map<Ljava/lang/String;Lcom/bj58/fangchan/fangfe/entity/SimpleEntity;>;Lcom/bj58/fangchan/fangfe/entity/SimpleEntity;>;Ljava/util/Map<Ljava/lang/String;Lcom/bj58/fangchan/fangfe/entity/SimpleEntity;>;'
const jstr = 'Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;III';
const BaseType = {
B: 'byte',
C: 'char',
D: 'double',
F: 'float',
I: 'int',
J: 'long',
S: 'short',
Z: 'boolean',
};
const BaseTypeKeys = Object.keys(BaseType);
// const BaseType = 'BCDFIJSZ';
function parseType(jstr) {
let str = '';
let stackArr = [{
tag: 'ROOT',
children: [],
}];
for(const w of jstr) {
str += w;
if (w === '<') {
const obj = {
tag: str.slice(0, -1),
children: [],
};
stackArr[stackArr.length - 1].children.push(obj);
stackArr.push(obj);
str = '';
}
if (w === ';') {
str !== ';' && stackArr[stackArr.length - 1].children.push({
tag: str.slice(0, -1),
children: [],
});
str = '';
}
if (str.length === 1 && BaseTypeKeys.indexOf(w) > -1) {
stackArr[stackArr.length - 1].children.push({
tag: BaseType[str],
children: [],
});
str = '';
}
if (w === '>') {
stackArr.length = stackArr.length - 1;
str = '';
}
}
return stackArr[0].children;
}
function stringify(obj) {
if (!Array.isArray(obj)) return obj;
return obj.map(o => {
return o.tag + (o.children.length > 0 ? `<${stringify(o.children)}>` : '');
}).join(',');
}
console.log(JSON.stringify(parseType(jstr), null, 4));
console.log(stringify(parseType(jstr)));Metadata
Metadata
Assignees
Labels
No labels