转到正文

浪淘沙

静观己心,厚积薄发

存档

分类: JAVA

原文地址:http://thihy.iteye.com/blog/1777065

本文是在学习正则表达式过程中整理的,虽然冠以教程,但实际上应该算是学习笔记。整篇文章需要对正则有一定的理解。。如果有啥写得不对的,或者写得不够清楚的,欢迎大家留言讨论。

概述

正则表达式(Regular Expression)是高效的、便捷的文本处理工具,能够快速查询符合某种规范的文本。

例如:[0-9]{3}可以匹配3位数字,[a-z]{3}则可以匹配3个小写字母。

目前正则表达式被众多工具所支持,比如egrepsedperlrubyJavaC#pythonTcl等,不同的工具下,正在表达式的范式可能会有略微的差别,执行引擎也可能不同。目前,正则引擎主要有:DFA, 传统型NFA, POSIX NFA, DFA/NFA混合。本文主要介绍Java正则表达式,它的引擎属于传统型NFA

Java正则支持Unicode,它在适当的时候,会使用java.lang.Character.codePointAt(CharSequence seq, int index)获取Code Point,而不是char继续阅读

原文地址:http://tech.ddvip.com/2009-04/1240299595116104_2.html

摘要:提出了基于RBAC模型的权限管理系统的设计和实现方案。介绍了采用的J2EE架构的多层体系结构设计,阐述了基于角色的访问控制RBAC模型的设计思想,并讨论了权限管理系统的核心面向对象设计模型,以及权限访问、权限控制和权限存储机制等关键技术。

关键词:权限管理系统;角色;访问控制;RBAC模型;J2EE;LDAP

0 引言

管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁。构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的。权限管理系统是管理信息系统中可代码重用性最高的模块之一。任何多用户的系统都不可避免的涉及到相同的权限需求,都需要解决实体鉴别、数据保密性、数据完整性、防抵赖和访问控制等安全服务(据ISO7498-2)。例如,访问控制服务要求系统根据操作者已经设定的操作权限,控制操作者可以访问哪些资源,以及确定对资源如何进行操作。 继续阅读

今天发现一问题,java读取excel的时候 ,再处理时间格式数据的时候不是很一致。比如有的会解析成2012/01/02 12:00:00 (excel单元格格式为:yyyy-mm-dd HH:mm:ss 单元格内容为:2012-01-02 00:00:00),

而有些会解析为:11/13/12 0:00(excel单元格格式为:yyyy-m-d H:mm 单元格内容为:2012-11-13 0:00:00)。为了使所有的时间数据都能解析成统一的格式。对原来的java代码进行的处理。对日期格式的数据进行特别的处理。

再解析数据的时候 先判断excel的数据是否CellType为DATE


public static String[][] parseXls(String filePath, int sheetNum) throws IOException, BiffException {
    //通过Workbook的静态方法getWorkbook选取Excel文件
    Workbook workbook = Workbook.getWorkbook(new File(filePath));
    //通过Workbook的getSheet方法选择第一个工作簿(从0开始)
    Sheet sheet = workbook.getSheet(sheetNum);
    int rows = sheet.getRows();
    int cols = sheet.getColumns();
    Cell cells[][] = new Cell[cols][rows];

    String[][] finalContents = new String[rows][cols];
    for (int i = 0; i < cols; i++) {
        for (int j = 0; j < rows; j++) {
             cells[i][j] = sheet.getCell(i, j);
             if (cells[i][j].getType() == CellType.DATE) {//对日期数据进行特殊处理,如果不处理的话 默认24h制会变成12小时制
                 finalContents[j][i] = TotemConfigParseJFrame.formatTime(sheet.getCell(i, j));
             } else {
                 finalContents[j][i] = sheet.getCell(i, j).getContents();
             }
       }
    }
}

public static String formatTime(Cell formatCell) {
    java.util.Date date = null;
    DateCell dateCell = (DateCell) formatCell;
    date = dateCell.getDate();
    long time = (date.getTime() / 1000) - 60 * 60 * 8;
    date.setTime(time * 1000);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return formatter.format(date);

}

//或者 formatTime 的实现方式也可以修改为 @see http://www.andykhan.com/jexcelapi/tutorial.html#dates

public static String formatTime(Cell formatCell) {
    java.util.Date date = null;
    DateCell dateCell = (DateCell) formatCell;
    date = dateCell.getDate();
    TimeZone gmtZone = TimeZone.getTimeZone("GMT");
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    formatter.setTimeZone(gmtZone);
    System.out.println(formatter.format(date));
    return formatter.format(date);

}

24小时制时间显示:
public class Datetime {

    public static void main(String args[]){
        java.util.Date current=new java.util.Date();
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String c=sdf.format(current);
        System.out.println(c);
   }
}

12小时制时间显示:


public class Datetime {

    public static void main(String args[]){
        java.util.Date current=new java.util.Date();
        java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String c=sdf.format(current);
        System.out.println(c);
    }
}

两者区别:yyyy-MM-dd HH:mm:ss ; yyyy-MM-dd hh:mm:ss

如下:

字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800

在中文操作系统下,Properties资源文件的编码的默认设置是ISO-8859-1。所以编辑Java文件中的中文不会出现问题,但编辑Properties资源文件中的中文会出现问题。为了防止中文乱码,我们可以这样做:

如你代码里写的,你可以在String username=property.getProperty(“username”);之后,添加JAVA代码页可以将乱码转为中文的。用如下语句就可以了,resultName=new String(username.getBytes(“ISO-8859-1”),“gbk”); 然后再用resultName就可以了,不过这样的话你下面的String password=property.getProperty(“password”);

其中红色的编码为 properties文件的编码格式。

比如:

我setting.properties文件 其文件编码为 UTF-8 ,setting.properties的内容如下:

#setting
#Mon Mar 11 17:34:46 CST 2013
configBaseDir=D\:\\www\\flowershop-dev\\flowershop_us-dev\\Configuration Settings
outputDirectory=D\:\\www\\flowershop-stag\\europe\\dutch\\staging\\vrelease\\testing\\app\\configs
test=D\:\\桌面\\1月22号全部翻译\\1月22号全部翻译

因为test这个properties包含中文。如果不进行处理的话,会出现乱码。我的处理方式为:


String configBaseDir = new String(prop.getProperty("configBaseDir").getBytes("ISO-8859-1"), "UTF-8"); //ISO-8859-1 为读取properties的默认编码  UTF-8为properties文件的真正编码

有的人提出用JDK自带的native2ascii进行编码转换。这个没有自己试验。

参考:

http://codinglu.blog.163.com/blog/static/27823969201111985820609/

http://hi.baidu.com/flymz/item/cc1cc3c8a10650340931c645

http://zhidao.baidu.com/question/154062493.html

 

原文地址:http://sauzny.iteye.com/blog/1700313


// 一维数组合并
private static String[] getMergeArray(String[] al, String[] bl) {
    String[] a = al;
    String[] b = bl;
    String[] c = new String[a.length + b.length];
    System.arraycopy(a, 0, c, 0, a.length);
    System.arraycopy(b, 0, c, a.length, b.length);
    return c;
}

// 二维数组纵向合并
private static String[][] unite(String[][] content1, String[][] content2) {
    String[][] newArrey = new String[][] {};
    List<String[]> list = new ArrayList<String[]>();
    list.addAll(Arrays.<String[]> asList(content1));
    list.addAll(Arrays.<String[]> asList(content2));
    return list.toArray(newArrey);
}

// 二维数组横向合并
public static String[][] getMergeArray(String[][] al, String[][] bl) {
    if(al == null || al.length == 0) return bl;
    if(bl == null || bl.length == 0) return al;
    String[][] newArrey = null;
    // 根据数组的长度,判断要补全哪个数组
    if (al.length > bl.length) {
        newArrey = new String[al.length][];
        // 补全较短的数组
        String[][] temps = new String[al.length - bl.length][bl[0].length];
        for (int i = 0; i < temps.length; i++) {
            for (int j = 0; j < temps[0].length; j++) {
                temps[i][j] = "";
            }
        }
        String[][] btemp = unite(bl, temps);
        // 合并
        for (int k = 0; k < al.length; k++) {
            newArrey[k] = getMergeArray(al[k], btemp[k]);
        }
    } else {
        newArrey = new String[bl.length][];
        String[][] temps = new String[bl.length - al.length][al[0].length];
        for (int i = 0; i < temps.length; i++) {
            for (int j = 0; j < temps[0].length; j++)
                temps[i][j] = "";
        }
        String[][] atemp = unite(al, temps);
        for (int k = 0; k < bl.length; k++) {
            newArrey[k] = getMergeArray(atemp[k], bl[k]);
        }
    }
    return newArrey;
}

原文地址:http://sauzny.iteye.com/blog/1700313

使用java写了一个小程序,就是读取php文件的内容,然后使用xls里面对应的字符串执行替换操作。但是,最后出现了一下点小问题。

再NB IDE里面可以正常的运行。但是当我使用NB 打包成jar,直接运行该jar的时候 就出现中文乱码问题了。

所有的乱码问题,都是因为编码不一致导致的。debug了一下,原来是因为在读取操作的时候,读取出来的内容已经是乱码了。问题找到了,解决方案就

比较好找了。因为文件是utf-8,所以为了保证不再出现乱码问题,读取的时候直接强制按照utf-8的方式读取就行了


BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-8"));

String line = null;

while ((line = br.readLine()) != null) {

lines.add(line);

}

br.close();

 
继续阅读