Java 写题常用模板

以下代码均为Java 8 下的结果:

输入输出:

Scanner sc = new Scanner(System.in);

// 多组输入:
while (sc.hasNext()) {
    // 一个或多个空格,分隔字符串,开头有空格不能处理,需特殊处理,java 8 版本,如果输入的一行只有空格的话,s为空
    // 扩展: 如果是要分隔如 . |  符号,后面的参数需要加入转义字符 \\ 即  \\.  \\|
    String[] s = sc.nextLine().split("\\s+");
    int[] n = new int[s.length];
    // 如果第一个前面有空格需要特殊处理
    for (int i = s[0].equals("") ? 1 : 0; i < s.length; i++) {
        n[i] = Integer.valueOf(s[i]);
    }
    // 取数的时候也需要注意,第一个值默认为0,  不可用
    for (int i : n) {
        System.out.println(i);
    }
    // 非nextLine() 后面跟上nextLine() 换行会被nextLine()抵消掉,自己的输入无效,需要再用一个抵消换行符
    // 也可以全用nextLine
    int m = Integer.valueOf(sc.next());
    // 抵消换行符
    sc.nextLine();
    String p = sc.nextLine();
    System.out.println(p);
}



// 输出数组
int[] a = {1, 2, 3};
List<Integer> l = new ArrayList<>();
l.add(1);
l.add(2);
l.add(3);
l.add(4);
System.out.println(Arrays.toString(l.toArray()));
System.out.println();
System.out.println(Arrays.toString(a));

Map<Integer, Integer> tp = new HashMap<>();
tp.put(1, 1);
System.out.println(p.toString());

// 数组c求和,同样还有max,min等函数
int p = Arrays.stream(c).sum();

排序:

List<Integer> p = new ArrayList<>();
p.add(4);
p.add(3);
p.add(1);
p.add(2);
// lambda 表达式 升序排序,逆序反过来就行
Collections.sort(p, (o1, o2) -> o1 - o2);
// 返回值的表达式 和 上面相似
Collections.sort(p, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 - o2;
    }
});
System.out.println(p.toString());
// a为变长数组,不是2 * 5 第一维为 3,第二维为 5
int[][] a = {{3, 1, 2}, {2, 9, 6, 7, 8}};

// 按a的第二列逆序排序,第二列相同按第一列 升序排列
Arrays.sort(a, ((o1, o2) -> o1[1] == o2[1] ? o2[0] - o2[0] : o1[1] - o2[1]));
Arrays.sort(a, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        if (o1[1] != o2[1]) return o1[1] - o2[1];
        return o1[0] - o2[0];
    }
});
for (int[] i : a) {
    System.out.println(Arrays.toString(i));
}

map操作

// Map 初始化
Map<Integer, Integer> p = new HashMap<Integer, Integer>() {{
    put(1, 1);
    put(-1, 2);
}};

// 排序
List<Map.Entry<Integer, Integer>> t = new ArrayList<>(p.entrySet());
Collections.sort(t, (o1, o2) -> o2.getKey() - o2.getKey());
for (Map.Entry<Integer, Integer> i : t) {
    System.out.printf("%d %d \n", i.getKey(), i.getValue());
}

二分

int[] p = {0, 1, 4, 5};
// 数组用Arrays,List 对应为Collections
// 查找元素在数组中,返回下标(从0 开始),如果查找元素不在数组中,则返回插入的位置,从-1 开始
// -1 表示比所有元素都小
// -(length + 1) 则比所有元素都大
int index = Arrays.binarySearch(p, 0);

// 以下方法皆为数组中不存在key值时进行的操作
// upper_bound: 找到第一个 大于 key 值的下标的方法为:index < 0 , -index - 1 ,如果此时-index - 1 == l.legth,则表示插入值大于数组中所有元素,此时找不到比它大的值
// 找到小于key 值:index < 0, -index - 2 , 如果 -index - 2 < 0,则表示没有小于 key 值的元素

set 集合操作

//set 初始化
Set<Integer> s = new HashSet<Integer>() {{
    add(1);
    add(2);
    add(3);
}};
Set<Integer> st = new HashSet<Integer>() {{
    add(2);
    add(10);
    add(3);
}};

// 初始化
Set<Integer> p = new HashSet<>(s);
// 求交集
p.retainAll(st);
System.out.println(p);
p.clear();

// 初始化
p.addAll(s);
// 求差集  s - st
p.removeAll(st);
System.out.println(p);

String 操作

// 将数字表示的字符转逆序
String s = new StringBuffer(String.valueOf(x)).reverse().toString();
// 将字符串转换为int
return Integer.parseInt(s);
// 字符串求子串,[a,b)
s = s.substring(a,b);
// 将string 中的元素排序
char [] sp = s.toCharArray();
Arrays.sort(sp);
s = String.copyValueOf(sp);


// 当涉及的字符串+= 操作较多时,会变的很耗时间,这个时候用StringBuilder 会比较快,不然容易T
StringBuilder ans = new StringBuilder();
ans.append('a');

输入输出流

// 输入流声明
class InputReader {
    BufferedReader buf;
    StringTokenizer tok;

    InputReader() {
        buf = new BufferedReader(new InputStreamReader(System.in));
    }

    boolean hasNext() {
        while (tok == null || !tok.hasMoreElements()) {
            try {
                tok = new StringTokenizer(buf.readLine());
            } catch (Exception e) {
                return false;
            }
        }
        return true;
    }

    String next() {
        if (hasNext()) return tok.nextToken();
        return null;
    }

    int nextInt() {
        return Integer.parseInt(next());
    }

    long nextLong() {
        return Long.parseLong(next());
    }

    double nextDouble() {
        return Double.parseDouble(next());
    }

    BigInteger nextBigInteger() {
        return new BigInteger(next());
    }

    BigDecimal nextBigDecimal() {
        return new BigDecimal(next());
    }
}


// 使用
InputReader sc = new InputReader();
PrintWriter out = new PrintWriter(System.out);
int n = sc.nextInt(), m = sc.nextInt();
out.println(s);
// 记得关闭输出流
out.close();

系统包含项目的源码和搭建的详细文档,以及数据库脚本 系统功能模块(开发时可取舍) 1. 权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限。 按钮权限: 给角色分配按钮权限。 2. 按钮管理:自定义按钮管理,维护按钮权限标识等 3. 菜单管理:无限级别自定义菜单,自定义菜单图标,业务菜单和系统菜单分离,菜单状态显示隐藏(递归处理) 4. 数据字典:无限级别,支持多级别无限分类。内设编号,排序等 5. 组织机构:无限级别,公司or部门管理 6. 在线管理:websocket技术,实时检测在线用户列表,统计在线人数,可强制用户下线 同一用户只能在一个客户端登录 7. 系统用户:对各个基本的用户增删改查,单发、群发站内信邮件短信,导入导出excel表格,批量删除 8. 会员管理:对前台用户管理,分配会员级别,到期时间,状态,联系信息等资料 9. 代码生成:生成完整的模块代码,并保留生成记录模版,可复用 (超强悍开发利器) 正向生成: 生成完整的模块,页面、处理类、service层、myabaits的xml 建表的sql脚本等 反向生成: 任意连接其它数据库(mysql、oracle、sqlserver),根据表反射生成本系统的模块 10. 性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等 11. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间 12. 发送邮件:单发,群发邮件 13. 置二维码:生成二维码图表保存到服务器 or 解析读取二维码内信息 14. 图表报表:柱状图、饼状图、折线图、各种图表大全 15. 地图工具:打开地图, 鼠标点击地图某位置获取经纬度坐标,根据经纬度计算两点距离 16. 打印测试:页面打印预览测试 17. 图片管理:对批量上传的图片统一管理 ,点击放大,可打开多个,自由切换,绚丽预览效果 18. 图片爬虫:输入某网址,爬出其图片显示在页面上,可以放大预览。可保存到服务器上,到图片管理里面 19. 站内信:收信箱和发信箱, websocket技术通讯技术做的及时收信提醒,可配置语音提示来信 20. 系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置 21. 及时聊天:打开聊天窗口,可群聊、一对一聊天 22. 表单构建:拖拽式快速自定义构建表单,组建元素丰富,有富文本、上传控件、下拉框等等 23. 主附结构:提供一个主表和明细表模块的例子(用本代码生成器生成的) 24. 员工管理:和组织机构部门管理,可以绑定登录系统用户,授权数据权限 -------------------------------------------------------------------------------------------------------------------------数据库管理 25. 数据库备份:可备份单表、整库,支持本地和远程数据库备份(java界面编程技术,socket编程技术) 26. 备份定时器:quartz 2.2 强大的任务调度,多线程备份数据库,任务启动关闭异步操作 27. 数据库还原:历史备份记录,还原数据库 or 单表 ,统计备份时间和文件大小 28. SQL编辑器:强大的SQL编辑器,支持编辑语句复杂查询语句,生成动态报表,可导出excel ------------------------------------------------------------------------------------------------------------------------- 菜单权限:分配给每个角色不同的菜单权限, 每个角色看到的菜单不同,无限级别菜单 按钮权限:独立分配不同的角色不同的功能权限,增删改查权限分配具体到不同的菜单,自定义按钮管理 支持多用户分权限管理后台, 权限具体到不同的菜单不同的按钮
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值