JAVA学习脚印3: java语言控制流程
JAVA学习脚印3: java语言控制流程
本节首先介绍,java语言中的字符串处理以及输入输出控制,最后介绍控制流程。
在讲述控制流程之前,先介绍以下java中字符串和输入输出的内容,以便后续练习编写控制流程程序时做准备。
1.字符串处理
java中的字符串就是uncoded字符序列。java标准库提供了String类来处理字符串。
1)构建字符串
第一种方式就是使用双引号把字符串括起来,例如"hello"就是一个字符串String类的一个实例:String greeting = "hello";
第二种方式是使用字符串构建器StringBuilder类提供的方法。有些时候需要由较短的字符串构建字符串,这个时候使用字符串连接符号+(见下面字符串拼接部分)的效率比较低,因此可以使用StringBuilder类来避免该问题,例如:
StringBuilder builder = new StringBuilder();
builder.append("hello");
builder.append(",world!");
String hello = builder.toString();
System.out.println(hello);// print hello,world!
2)字符串拼接
java语言使用+来实现字符串的拼接,例如"hello"+",world!",将形成"hello,world!"。
注意,当将一个字符串与一个非字符串的值进行拼接时,后者将自动调用其toString()方法转换为字符串并与前者拼接在一起,例如:
"your age is "+age;//Ok
3)字符串取子串
使用sustring方法,例如 hello=hello.substring(0,3)+'p';// hello = "help"
4)字符串比较
使用equals方法检测两个字符串是否相等,一定不能使用 == 运算符检测两个字符串是否相等,== 运算符只能够确定两个字符串是否放置在同一个位置上。
我们查看String类equals方法源码:
public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String) anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
就明白了equals方法将首先查看是否引用同一个对象,若是则肯定两个字符串对象相等;否则逐个字符的比较两个对象,直到判断出结果。
String a = "hello";
String b = "hello";
String c = "help";
System.out.println((a == b));// pirnt true
System.out.println( ("hel" == c.substring(0,3)) );//print false
System.out.println((a.equals(b)));//print true
System.out.println((a.equals(c)));//print false
实际上虚拟机中字符串常量是共享的,所以a==b 为true;但是+或者substring等操作产生的结果并不是共享的,因此"hel" == c.substring(0,3)) 为false。
因此不要使用 == 运算符检测字符串是否相等,而要使用使用equals方法。
2.输入输出
1)标准输入输出流(控制台窗口)
输入:
首先构造一个Scanner对象来关联System.in,接受输入:
Scanner in = new Scanner(System.in);
String name = in.nextLine();//输入姓名
int age = in.nextInt();// 输入年龄
另外从控制台读取密码时一般会回显出来,因此系统提供了Console类提供密码输入:
Console cons;
String username;
char[] passwd;
if ((cons = System.console()) != null) {username = cons.readLine("User name:");passwd = cons.readPassword("Password:");//do some jobArrays.fill(passwd, ' ');//迅速填充密码域 避免信息泄漏
}
输出:
输出基本上时之前经常用过的了,如System.out.print。要想格式化输出,java提供了和C语言一样的System.out.printf函数来控制输出格式。当然也可以使用静态的String.format方法创建一个格式化的字符串用于输出,例如:
System.out.printf("%.8f", Math.PI);// print 3.14159265
2)文件的输入输出
输入:
同样可以利用Scanner来读入文件,例如:
Scanner in = new Scanner(new File("1.txt"));
String line = in.nextLine();
输出:
可以利用PrintWriter来写入文件,例如:
PrintWriter out = new PrintWriter(new File("2.txt"));
out.println(line);
注意Scanner和PrintWriter构造函数均需要File对象,File对象表达的是抽象路径名,它根据路径字符串生成。
下面综合标准输入输出流以及文件读写流,编写一个从控制台读入文件名,然后读取文件内容,并将文件行数写入文件及控制台的程序。代码如下例3-1所示:
例3-1 InputAndOutput.java
package com.learningjava;
import java.io.*;
import java.util.Scanner;/*** a program to statistic file line count* @version 1.1 2013-08-06* @author wangdq*/
public class InputAndOutput {public static void main(String[] args) {try {//read file name form standard inputScanner in = new Scanner(System.in);//constuct a new scanner to read fileSystem.out.println("input the filename for reading content:");Scanner filein = new Scanner(new File(in.nextLine ()));//construc a new writer to write fileSystem.out.println("input the filename for storing result:");PrintWriter out = new PrintWriter(new File(in.nextLine()));//read lines from fileint lineCnt = 0;while(filein.hasNextLine()) {filein.nextLine();lineCnt++;}//store the lineCnt to the fileout.println("there has :"+lineCnt+" in the file.");//print the lineCnt to the standard outputSystem.out.println(lineCnt);//close the streamin.close();filein.close();out.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
程序运行效果:
wangdq@wangdq:~/workspace/InputAndOutput/bin$ java com.learningjava.InputAndOutput
input the filename for reading content:
../src/com/learningjava/InputAndOutput.java
input the filename for storing result:
../cnt.txt
45
wangdq@wangdq:~/workspace/InputAndOutput/bin$ cat ../cnt.txt
there has :45 in the file.
程序读取InputAndOutput.java文件,计算出公有45行,并将结果写到cnt.txt文件中,显示在控制台上。linux 下可通过 cat filename|wc -l 命令或者利用vim编辑器查看文件行数,以验证程序的正确性。
3.流程控制
java中流程控制与c++中基本上相同,但也有区别。java中分支结构可以由if、或者if...else语句控制 ,多重选择由switch语句实现;循环结构一共有三种即while、do...while、for循环;中断流程的语句有break和continue语句。
需要注意的是:
1)在java中不允许在嵌套的块中重定义一个变量。例如:
int n = 0;
int m = 5;
for(int n = 0 ;n< m;n++) {
}
将出现错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Duplicate local variable n
外围的变量n和for循环块中的n属于重复定义。再看一例,语句序列:
int n = 0;
int m = 5;
if(m > 0){int n;
}
也会引起同样的问题,注意java与c++的区别。
2)java中还新增了一种更好的循环结构,这种增强的循环结构语句格式如下:
for(variable: collection) statement
例如输出数组的内容可以如下:
String[] words = {"apple","banana","orange","grape"};
for(String item:words) {System.out.println(item);
}
可以将这种循环称之为for each循环,它使代码更加简洁。
至此,熟悉了java语言中的字符串,输入输出以及控制流。
JAVA学习脚印3: java语言控制流程相关推荐
- JAVA学习脚印10:解惑java 中UTF-16与char
JAVA学习脚印10:解惑java 中UTF-16与char java中的char.utf-16编码.代码点.代码单元等概念,做一个了解还是有必要的. 1.基本概念 1) Java的字符类型和字符串类 ...
- JAVA学习脚印2: 数据类型和运算符
JAVA学习脚印2: 数据类型和运算符 本节将记录java中的数据类型和运算符. 1. java中的数据类型 java中变量的数据类型有两种:基本类型(primitive)和引用(reference) ...
- 深圳Java学习培训:SQL语言之索引-千锋
深圳Java学习培训:SQL语言之索引-千锋 前言 本章我们将学习MySQL中的索引,本文将从索引的作用.索引的分类.创建索引的语法.索引的使用策略以及索引的实现原理等方面带大家了解索引. 索引的作用 ...
- Java学习笔记1:Java中有关print、println、printf的用法和区别
Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...
- bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
好程序员Java学习路线分享Java基础之string 好程序员Java培训 先来讲一下字符串 字串符分类: 不可变字符串:----String.字符串本身不能发生改变,与指向字符串的引用无关. St ...
- Java学习系列(十)Java面向对象之I/O流(上)
IO流 我们知道应用程序运行时数据是保存在内存中的,但由于内存中的数据不可持久保存(如断电或程序退出时数据会丢失),因此需要一种手段将数据写入硬盘或读入内存.面向IO流编程就是一种很好的选择.IO:I ...
- Java学习07:Java面向对象
Java学习07: Java面向对象: 链接:https://pan.baidu.com/s/1gzlBk5OOVI6oEv-WOkHuhQ 提取码:iqov
- java学习day4(Java基础)流程控制语句
分支结构 分支结构的概念 • 当需要进行条件判断并做出选择时,使用分支结构. if分支结构 • if(条件表达式) { 语句块; } 判断条件表达式是否成立 => 若成立,则执行语句块: =&g ...
- JAVA学习笔记 03 - JAVA语言程序结构
本文是Java基础课程的第三课.计算机语言的程序结构无外乎顺序结构.分支结构.循环结构,本文主要介绍Java语言中这些程序结构是如何实现的 文章目录 一.程序结构 二.分支结构 1.单分支if语句 2 ...
最新文章
- 在不进入Guest OS的情况下,取得Guest OS的IP地址
- 缓冲区溢出漏洞攻击演示实验(CProxy 6.2缓冲区溢出漏洞)
- [转] 标准化和归一化
- zorka源码解读之Beanshell与zorka的交互实现
- 科技感十足的403html动态源码
- final string 堆区 栈区 java_JVM内存初学 堆、栈、方法区
- 减少浏览器兼容性问题
- r语言岭回归参数选择_78-预测分析-R语言实现-岭回归与LASSO回归
- React入门第一天(绑定事件,动态渲染,修改样式、传参)
- linux系统棋牌搭建教程,幼麟棋牌四川麻将搭建教程补充
- 【bzoj4011】【HNOI2015】落忆枫音【树形DP】
- mono java 性能_Mono对Java的支持
- 解决了Office2007向程序发送命令时出现错误 的问题
- linux命令删除raid,甲秀之音-Linux环境下删除硬盘中残留的raid信息
- 将A1B2C3D4E5F6G7H8拆分开来,并分别存入int[]和String[]数组,得到的结果为[1,2,3,4,5,6,7,8]和[A,B,C,D,E,F,G,H],
- 想进入游戏建模行业,必须要了解的基础知识
- C实现前序遍历二叉树
- chatbot 资料汇总
- Java反射的基本理解
- 磁盘清理软件 智能清理Mac