java scanner

java.util.Scanner是Java5的新特征,主要功能是简化文本扫描。这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java API文档中列举了大量的API方法,但是都不怎么地

一、扫描控制台输入

这个例子是常常会用到,但是如果没有Scanner,你写写就知道多难受了。
当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。

/**

  • 扫描控制台输入
  • @author leizhimin 2009-7-24 11:24:47
    */
    public class TestScanner {
    public static void main(String[] args) { 
            Scanner s = new Scanner(System.in); 
            System.out.println("请输入字符串:"); 
            while (true) { 
                    String line = s.nextLine(); 
                    if (line.equals("exit")) break; 
                    System.out.println(">>>" + line); 
            } 
    } 
    
    }

请输入字符串:
234

234
wer
wer
bye
bye
exit

Process finished with exit code 0

先写这里吧,有空再继续完善。

二、如果说Scanner使用简便,不如说Scanner的构造器支持多种方式,构建Scanner的对象很方便。

可以从字符串(Readable)、输入流、文件等等来直接构建Scanner对象,有了Scanner了,就可以逐段(根据正则分隔式)来扫描整个文本,并对扫描后的结果做想要的处理。

三、Scanner默认使用空格作为分割符来分隔文本,但允许你指定新的分隔符

使用默认的空格分隔符:
public static void main(String[] args) throws FileNotFoundException {
Scanner s = new Scanner(“123 asdf sd 45 789 sdf asdfl,sdf.sdfl,asdf ……asdfkl las”);
// s.useDelimiter(“ |,|\.”);
while (s.hasNext()) {
System.out.println(s.next());
}
}

123
asdf
sd
45
789
sdf
asdfl,sdf.sdfl,asdf
……asdfkl
las

Process finished with exit code 0

将注释行去掉,使用空格或逗号或点号作为分隔符,输出结果如下:
123
asdf
sd
45
789
sdf
asdfl
sdf
sdfl
asdf

asdfkl

las

Process finished with exit code 0

四、一大堆API函数,实用的没几个

(很多API,注释很让人迷惑,几乎毫无用处,这个类就这样被糟蹋了,启了很不错的名字,实际上做的全是龌龊事)

下面这几个相对实用:

delimiter()
返回此 Scanner 当前正在用于匹配分隔符的 Pattern。
hasNext()
判断扫描器中当前扫描位置后是否还存在下一段。(原APIDoc的注释很扯淡)
hasNextLine()
如果在此扫描器的输入中存在另一行,则返回 true。
next()
查找并返回来自此扫描器的下一个完整标记。
nextLine()
此扫描器执行当前行,并返回跳过的输入信息。

五、逐行扫描文件,并逐行输出

看不到价值的扫描过程
public static void main(String[] args) throws FileNotFoundException {
InputStream in = new FileInputStream(new File(“C:\AutoSubmit.java”));
Scanner s = new Scanner(in);
while(s.hasNextLine()){
System.out.println(s.nextLine());
}
}

package own;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;

import com.verisign.uuid.UUID;

/**

  • @author wangpeng
  • */
    public class AutoSubmit {

    /**

    • @param args
    • @throws Exception
      */
      public static void main(String[] args) throws Exception {

…在此省略N行

Process finished with exit code 0

Java对字符串支持还是比较弱的,尽管Java一直在努力。

参考文献

http://bbs.itheima.com/thread-90856-1-1.html

java system 对象

关于Java中使用的System对象,我们经常使用的是Systme.out.print ,而且也仅仅知道这是一个可以在控制台打印出语句,而没有去深究它的内在实现原理。下面我就详细地介绍System对象。

1.JDK中有如下定义:.The System class contains several useful class fields and methods. It cannot be instantiated.
也就是说System对象是不能被实例化的,只能通过调用它的属性和方法来使用它。

2.System中的属性 Systme.in 是InputStream类型的,可以接受控制台输入的信息; System.out 和 System.err 都是PrintStream类型的 ,可以在控制台输出信息。

3.System.getProperties() 返回的是Properties类型的对象,而返回的信息是Java虚拟机启动过程中所要加载的环境配置信息。可以通过下面的代码获取和输出信息,由于Properties是HashTable的一个子类,因此可以通过Map方法取出该集合中的元素

Java代码
[java] view plain copy
package javase.day18;

import java.util.Properties;

public class SystemDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Properties prop=System.getProperties();
for(Object key:prop.keySet()){
String keyStr=(String)key;
String value=prop.getProperty(keyStr);
System.out.println(keyStr+” — “+value);
}
}
}

结果:
控制台输出系统环境配置信息:

java.runtime.name — Java(TM) SE Runtime Environment
sun.boot.library.path — C:\Java\developerEnv\Java\jdk1.6.0_16\jre\bin
java.vm.version — 14.2-b01
java.vm.vendor — Sun Microsystems Inc.
java.vendor.url — http://java.sun.com/
path.separator — ;
java.vm.name — Java HotSpot(TM) Client VM
file.encoding.pkg — sun.io
sun.java.launcher — SUN_STANDARD
user.country — CN
sun.os.patch.level — Service Pack 3
java.vm.specification.name — Java Virtual Machine Specification
user.dir — D:\workspace\BlackHorse
java.runtime.version — 1.6.0_16-b01
java.awt.graphicsenv — sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs — C:\Java\developerEnv\Java\jdk1.6.0_16\jre\lib\endorsed
os.arch — x86
java.io.tmpdir — C:\DOCUME~1\CHENGR~1\LOCALS~1\Temp\
line.separator —
……

……
……

使用以下代码也可以使控制台输出系统环境配置信息:

[java] view plain copy
public class SystemDemo {
public static void main(String[] args) {
System.getProperties().list(System.out);
}
}

4.可以通过System对象在系统中自定义一些特有的信息:
System.setProperty(myKey , myValue);

另外需要注意的一点是: 所谓的 system porperty,system 指的是 JRE (runtime)system,不是指 OS。
System.setProperty(“net.jxta.tls.principal”, “client”);
System.setProperty(“net.jxta.tls.password”, “password”);
System.setProperty(“JXTA_HOME”,System.getProperty(“JXTA_HOME”,”client”));
可以利用系统属性来加载多个驱动

参考

http://blog.csdn.net/alex_zhuang/article/details/6918147

http://www.cnblogs.com/xuhuan/articles/1522212.html

java 术语

Aspectj

AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

参考资料

比较分析 Spring AOP 和 AspectJ 之间的差别

跟我学AspectJ(一)

什么是事务?

我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操作数据的并不可靠,需要在这种情况下进行回退。

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态。

事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用事务。

常用站点

http://sivalabs.in/

http://www.dzone.com
Dzone为全球的软件开发者和软件工程师们开发与发布珍贵的软件方面的相关内容和信息。15年来,Dzone用它诚实的品质、产品和资源分享服务赢得了顾客的信任和热爱,而且会继续为顾客带来巨大的影响。DZone坐落在美国新喀里多尼亚的加利地区,为全球的机构组织和软件开发者提供服务。

https://www.infoq.com

http://www.51cto.com/

工具篇

http://www.generatedata.com/

https://zeplin.io/

在线学院

https://www.codeschool.com/

https://cn.udacity.com/

https://teamtreehouse.com/

https://frontendfront.com/

https://www.lynda.com/

http://www.tutorialspoint.com/index.htm

https://www.codecademy.com

https://www.coursera.org/

http://www.sololearn.com/

https://www.udemy.com

技术问答

http://stackoverflow.com/

https://community.oracle.com/community/java

https://azure.microsoft.com/en-us/develop/java/

http://www.javaworld.com/

站点列表

http://webdevchecklist.com/