Java 笔记

- 解决idea运行单java文件时因别的文件错误而报错的问题

https://blog.csdn.net/zbreezeH/article/details/106446307?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

  • 为什么要使用在idea使用eclipse compiler(ecj)?

因为idea默认使用javac,而javac当在编译时发现一个编译错误就直接停止编译了。而ecj支持proceed on errors(出错时继续),这样就能够全局看到整个项目存在多少问题。

- 面试题https://www.cnblogs.com/ihmlt/p/12382588.html

- 判断类型

getClass()

- 读取一个csv文件为 HashMap 并自定义 key 行,再将HashMap 输出

文件夹为
在这里插入图片描述


├─ example1
│  	├─ src
│  	│	├─1.csv
│  	│	├─Deal_array.java
│  	│	├─MyFile.java
│  	│	├─output.csv

文件 1.csv
第0列,第1列,第2列
1.1,丙辰中秋,怒发冲冠
1.2,欢饮达旦,凭栏处
1.3,大醉,潇潇雨歇
1.4,作此篇,抬望眼
1.5,兼怀子由,仰天长啸
1.6,明月几时有,壮怀激烈
1.7,把酒问青天,三十功名尘与土
1.8,不知天上宫阙,八千里路云和月
1.9,今夕是何年,莫等闲
2.0,我欲乘风归去,白了少年头
2.1,又恐琼楼玉宇,空悲切
2.2,高处不胜寒,靖康耻
2.3,起舞弄清影,犹未雪
2.4,何似在人间,臣子恨
2.5,转朱阁,何时灭
2.6,低绮户,驾长车
2.7,照无眠,踏破贺兰山缺
2.8,不应有恨,壮志饥餐胡虏肉
2.9,何事长向别时圆,笑谈渴饮匈奴血
3.0,人有悲欢离合,待从头
3.1,月有阴晴圆缺,收拾旧山河
3.2,此事古难全,朝天阙
3.3,但愿人长久,等等等
3.4,千里共婵娟,等等等
Deal_array.java ,提供 Integer[] 的交并补
import java.util.*;

/**
 * 用最少循环求两个数组的交集、差集、并集
 *
 */
public class Deal_array
{
    //构造方法
//        Integer[] m = { 1, 2, 3, 4, 5 };
//        Integer[] n = { 3, 4, 6 };
    /**
     * 求并集
     *
     * @param m
     * @param n
     * @return
     */
    public Integer[] getB(Integer[] m, Integer[] n)
    {
        // 将数组转换为set集合
        Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(m));
        Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(n));

        // 合并两个集合
        set1.addAll(set2);

        Integer[] arr = {};
        return set1.toArray(arr);
    }

    /**
     * 求交集
     *
     * @param m
     * @param n
     * @return
     */
    public Integer[] getJ(Integer[] m, Integer[] n)
    {
        List<Integer> rs = new ArrayList<Integer>();
        // 将较长的数组转换为set
        Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n));
        // 遍历较短的数组,实现最少循环
        for (Integer i : m.length > n.length ? n : m)
        {
            if (set.contains(i))
            {
                rs.add(i);
            }
        }

        Integer[] arr = {};
        return rs.toArray(arr);
    }

    /**
     * 求差集
     *
     * @param m
     * @param n
     * @return
     */
    public  Integer[] getC(Integer[] m, Integer[] n)
    {
        // 将较长的数组转换为set
        Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n));

        // 遍历较短的数组,实现最少循环
        for (Integer i : m.length > n.length ? n : m)
        {
            // 如果集合里有相同的就删掉,如果没有就将值添加到集合
            if (set.contains(i))
            {
                set.remove(i);
            } else
            {
                set.add(i);
            }
        }
        Integer[] arr = {};
        return set.toArray(arr);
    }
}
MyFile.java
package com.example.myclass;

import java.io.*;
import java.util.HashMap;
import java.util.Map;



public class MyFile {

    /*
    *读取一个csv文件并转化为hashmap, Integer[] pickkey = new Integer[]{0,3}
    */
    public HashMap<String ,String> getHashMap(String pathname, Integer[] pickkey) {

        //防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw;
        //不关闭文件会导致资源的泄露,读写文件都同理
        //Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;详细解读https://stackoverflow.com/a/12665271
        try (FileReader reader = new FileReader(pathname);
             BufferedReader br = new BufferedReader(reader) // 建立一个对象,它把文件内容转成计算机能读懂的语言
        )
        {
            HashMap<String, String> cacheMap = new HashMap<>();
            String line;

            int i = 1;
            while ((line = br.readLine()) != null) {
                if (i==1) {
                    i=2;
                    continue;
                }
                if(line.substring(line.length() - 1).equals(",") ){ //如果csv文件中有行的末尾有逗号
                    line = line.substring(0, line.length() - 1);
                }
                String[] newLine = line.split(",");

                //所选的key
                String tempkey = "";
                for (int x:pickkey) {
                    tempkey = tempkey + "|" + newLine[x];
                }
                if (tempkey.substring(0,1).equals("|")) { //去除前面的 |
                    tempkey = tempkey.substring(1);
                }

                Integer[] n = new Integer[newLine.length];
                for (i=0; i<newLine.length; i++) {
                    n[i] = i;
                }
                Integer[] differenceArray = new Deal_array().getC(pickkey, n); //去掉选取为Key的行,将余下的拼为value

                String temvalue = "";
                for(int x:differenceArray) {
                    temvalue =temvalue+"|"+ newLine[x] ;
                }
                if (temvalue.substring(0,1).equals("|")) {  //去除前面的 |
                    temvalue = temvalue.substring(1);
                }

                cacheMap.put(tempkey, temvalue);
            }
            return cacheMap;
        }
        catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /*
     * 传入目录形如 String pathname = "E:\mydocuments\java\donghuan\src\test\java\output\test.txt"
     * 将会把HashMap存入一个本地文件,名为 test.txt
     */
    public static void writeHashmapToFile(String pathname, Map<String, String> map) {
        try {
            File writeName = new File(pathname);

//            writeName.createNewFile(); //只能在此文件不在的时候会创建,如存在同名文件则不执行,FileWriter可以在文件存在时仍然创建文件,也就是会删除原来文件再创建。

            FileWriter writer = new FileWriter(pathname); //创建文件,如存在则清空
            // FileWriter writer = new FileWriter(pathname, true); // 创建文件,true则为append模式,即存在文件即不清空,
            BufferedWriter writerout = new BufferedWriter(writer); //缓冲流

            for(Map.Entry x:map.entrySet()) {
                String mm = x.getKey().toString() + "-->" + x.getValue().toString() + "\n";
                System.out.println(mm);
                writerout.write(mm);
            }

            writerout.flush(); // 把缓存区内容压入文件, 经过实验,如果不处理缓存区数据,最终写入数据会缺失。
            writerout.close();

        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        HashMap<String ,String> x = new MyFile().getHashMap("E:\mydocuments\java\example1\src\\1.csv", new Integer[]{0});
        new MyFile().writeHashmapToFile("E:\mydocuments\java\example1\src\\output.csv", x);


//        for(Map.Entry<String, String> entry:x.entrySet()){
//            System.out.println(entry.getKey() + "-->" + entry.getValue());
//        }


//        for (Object key:x.keySet()) {
//            System.out.println(key.toString() + "-->"+ x.get(key).toString());
//        }
    }
}
out.csv , 这就是运行后的输出
|1.4|抬望-->|作此篇
|1.6|壮怀激-->|明月几时有
|2.5|何时-->|转朱阁
|3.4|等等-->|千里共婵娟
|2.4|臣子-->|何似在人间
|3.1|收拾旧山-->|月有阴晴圆缺
|1.2|凭栏-->|欢饮达旦
|2.2|靖康-->|高处不胜寒
|2.7|踏破贺兰山-->|照无眠
|1.9|莫等-->|今夕是何年
|1.8|八千里路云和-->|不知天上宫阙
|2.9|笑谈渴饮匈奴-->|何事长向别时圆
|1.1|怒发冲-->|丙辰中秋
|1.7|三十功名尘与-->|把酒问青天
|2.6|驾长-->|低绮户
|2.3|犹未-->|起舞弄清影
|3.2|朝天-->|此事古难全
|2.0|白了少年-->|我欲乘风归去
|3.0|待从-->|人有悲欢离合
|3.3|等等-->|但愿人长久
|2.1|空悲-->|又恐琼楼玉宇
|1.3|潇潇雨-->|大醉
|1.5|仰天长-->|兼怀子由
|2.8|壮志饥餐胡虏-->|不应有恨

java unix时间戳与标准时间的转换

import java.text.SimpleDateFormat;
import java.util.Date;

public class Mytest {

    public static void main(String args[]) {
        long time = new Date().getTime(); //得到unix 时间戳
        time = time/1000;
        System.out.println(time);    // java默认为13位时间戳,需要转为10位

        Date date =new Date(time*1000);  //time为10位unix 时间戳,则需要变为13位
        System.out.println(date);  // java日期串符

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String t = simpleDateFormat.format(date); //将java日期串符转为设定格式
        System.out.println(t);
    }
}

java自带工具

java自带工具

自动删除的hashMap

public class Test {

    static int MAX_HASH = 3;

    public static void main(String[] args) {
        //内存hash最大缓存量
//        final int MAX_HASH = 3;

        LinkedHashMap hashOne = new LinkedHashMap(MAX_HASH + 1, .75F, false)
        {
            protected boolean removeEldestEntry(Map.Entry eldest) {
                return size() > MAX_HASH;
            }
        };


		//测试
        hashOne.put("aa", "H");
        hashOne.put(1, "E");
        hashOne.put(2, "L");
        hashOne.put(3, "L");
        hashOne.put(4, "O");
        hashOne.put("bb", "L");
        hashOne.put(3, "O");
        System.out.println(hashOne);


        String[] mylist = new String[] {"aa","bb","cc","dd","3"};

        for(String one: mylist) {
            if (!hashOne.containsKey(one)) {
                hashOne.put(one, "O");
            }
        }
        System.out.println(hashOne);
        System.out.println(hashOne.containsKey(3));
    }
}

java获取运行方法的名字

这种方式获取的话,数组的第一个元素是当前运行方法的名称,第二个元素是调用当前方法的方法名称

StackTraceElement[] stackTrace = new Exception().getStackTrace();
String methodName = stackTrace[0].getMethodName(); 

// 这种方式获取的话,数组的第二个元素是当前运行方法的名称,第三个元素是调用当前方法的方法名称

stackTrace = Thread.currentThread().getStackTrace(); 
String methodName = stackTrace[1].getMethodName();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值