回复: 19
跳转到指定楼层
上一主题 下一主题
收起左侧

脸家店面

全局:

2016(7-9月) 码农类General 硕士 全职@meta - 内推 - 技术电面  | | Other | 应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
就是按格式打印json,之前用过json不记得了格式细节了,店面小哥说无所谓,就打印就可以了

类似这种的, 输入[1,2,3, {"id": 1, "name": "wang", "tag":[1,"home",2], "price":234}]
要求打出来这个
[  1,  2,  3,  {    "id": 1,    "name": "wang",    "tag": [      1,      "home",      2    ],    "price": 234  }]
因为对格式不熟悉,也没敢用recursive就直接iterative写了,感觉不太好,准备了这么久好多高级算法也学了,题也做了好多,可是需要种新题目还是蒙。求问大家如何用递归比较好,现在直到{}是json object就是key value pair, key是string, value是啥都行(数组,数字,json obj, ...)[]是json array里面也啥都可以,如何有效的用递归呢?是遇到[递归还是遇到{递归呢,目测没发现这两种情况在打印上有区别(是print不是parse附上我写的ugly程序public class parseJoson {  public static void main(String [] args) {      String s = "[1,2,3, {\"id\": 1, \"name\": \"wang\", \"tag\":[1,\"home\",2], \"price\":234}]";     String ss = "{ \"fi
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
){ // new string key               StringBuilder sb2 = new StringBuilder();               sb2.append(s.charAt(i));               i++;               while(i < s.length() && s.charAt(i) != '\"'){                  sb2.append(s.charAt(i));                  i++;               }               sb2.append(s.charAt(i));               String dents = dentSpace(dent);               System.out.print(dents + sb2.toString());                    }else if(s.charAt(i) == ':'){                System.out.print(s.charAt(i));           }              }  



补充内容 (2016-8-21 01:55):
程序格式没弄好~

评分

参与人数 3大米 +28 收起 理由
bych0223 + 3 感谢分享!
stephaniede + 5 很有用的信息!
夏虫不知雪花 + 20

查看全部评分


上一篇:Rakuten (乐天) 在线编程面试
下一篇:Cousera OA
推荐
 楼主| pinkdatura 2016-8-21 01:55:21 | 只看该作者
全局:
  1. public class parseJoson {
  2.   public static void main(String [] args) {
  3.       String s = "[1,2,3, {\"id\": 1, \"name\": \"wang\", \"tag\":[1,\"home\",2], \"price\":234}]";
  4.      String ss = "{ \"firstName\": \"John\", \"lastName\": \"Smith\", \"isAlive\": true, \"age\": 25, \"address\": { \"streetAddress\": \"21 2nd Street\", \"city\": \"New York\", \"state\": \"NY\", \"postalCode\": \"10021-3100\" }, \"phoneNumbers\": [ { \"type\": \"home\", \"number\": \"212 555-1234\" }, { \"type\": \"office\", \"number\": \"646 555-4567\" }, { \"type\": \"mobile\", \"number\": \"123 456-7890\" } ], \"children\": [], \"spouse\": nul }";


  5.      parseJson(ss);
  6.    
  7.   }
  8.   
  9.   public static String dentSpace(int dentNum) {
  10.       int count = 0;
  11.       StringBuilder sb = new StringBuilder();
  12.         while(count < dentNum){
  13.           sb.append(" ");
  14.           count++;
  15.         }
  16.       return sb.toString();

  17.   }
  18.   
  19.   public static void parseJson(String s) {
  20.       int dent = 0;
  21.       for(int i = 0; i < s.length(); i++) {
  22.            if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
  23.              StringBuilder sb = new StringBuilder();
  24.              while(i < s.length() && (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.')){
  25.                  sb.append(s.charAt(i));
  26.                  i++;
  27.              }
  28.              String dents = dentSpace(dent);
  29.              System.out.print(dents + sb.toString());
  30.              i--;
  31.            }else if(s.charAt(i) == '[' || s.charAt(i) == '{'){
  32.                if(i != 0 && s.charAt(i-1) == ':'){
  33.                    dent++;
  34.                    System.out.print(s.charAt(i));
  35.                    continue;
  36.                }

  37.             
  38.             
  39.              String dents = dentSpace(dent);
  40.              dent++;
  41.              System.out.print("\n" + dents + s.charAt(i)+"\n");
  42.             
  43.            }else if (s.charAt(i) == ','){     

  44.                System.out.print(s.charAt(i) + "\n");
  45.            }else if(s.charAt(i) == ']' || s.charAt(i) == '}') {
  46.               dent--;
  47.               String dents = dentSpace(dent);
  48.               if(i < s.length()-1 && s.charAt(i+1) == ',' ){
  49.                  System.out.println("\n" + dents + s.charAt(i) + ",");
  50.                  i++;
  51.               }else{
  52.                  System.out.println("\n" + dents + s.charAt(i));
  53.               }
  54.               
  55.            }else if(s.charAt(i) == '\"' ){ // new string key
  56.                StringBuilder sb2 = new StringBuilder();
  57.                sb2.append(s.charAt(i));
  58.                i++;
  59.                while(i < s.length() && s.charAt(i) != '\"'){
  60.                   sb2.append(s.charAt(i));
  61.                   i++;
  62.                }
  63.                sb2.append(s.charAt(i));
  64.                String dents = dentSpace(dent);
  65.                System.out.print(dents + sb2.toString());         
  66.            }else if(s.charAt(i) == ':'){
  67.                 System.out.print(s.charAt(i));
  68.            }

  69.         
  70.       }  
复制代码
回复

使用道具 举报

全局:
楼主看这样行不

  1.     public static String pretty(String s) {
  2.         StringBuilder sb = new StringBuilder();
  3.         int indent = 0;
  4.         char pre = 0;
  5.         for (char c : s.toCharArray()) {
  6.             if (Character.isWhitespace(c)) continue;
  7.             if (c == ']' || c == '}') indent--;
  8.             if (pre == '[' || pre == '{' || pre == ',' || c == ']' || c == '}') {
  9.                 sb.append('\n');
  10.                 for (int i = 0; i < indent; i++) sb.append("  ");
  11.             }      
  12.             sb.append(c);
  13.             if (c == '[' || c == '{') indent++;
  14.             pre = c;
  15.         }      
  16.         return sb.toString();
  17.     }
复制代码
回复

使用道具 举报

推荐
knight0clk 2016-11-8 21:41:57 | 只看该作者
全局:
楼主,感觉这个题用stack存储括号,然后进而控制缩紧比较简单一些吧?然后处理一个打印一行,这样一行一行的来
回复

使用道具 举报

🔗
 楼主| pinkdatura 2016-8-21 01:55:36 | 只看该作者
本楼:
全局:
求指教~
回复

使用道具 举报

🔗
edyyy 2016-8-21 02:10:25 | 只看该作者
全局:
谢谢楼主分享!请问楼主面的是什么职位啊,我都没有准备json
回复

使用道具 举报

🔗
 楼主| pinkdatura 2016-8-22 03:29:37 | 只看该作者
全局:
edyyy 发表于 2016-8-21 02:10
谢谢楼主分享!请问楼主面的是什么职位啊,我都没有准备json

就是普通的software engineer,不用准备json也行,面试官会给你大概讲解一下json的格式的,哎,刷了那么多题目可能还是自己基础不扎实。
回复

使用道具 举报

全局:
不太明白输入的意思
输入[1,2,3, {"id": 1, "name": "wang", "tag":[1,"home",2], "price":234}]中1,2,3是什么?
回复

使用道具 举报

🔗
 楼主| pinkdatura 2016-8-23 01:39:28 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| pinkdatura 2016-8-23 01:40:04 | 只看该作者
全局:
已经收到拒信,哎
回复

使用道具 举报

🔗
stephaniede 2016-8-24 06:26:52 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| pinkdatura 2016-8-24 07:00:10 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表