Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说JAVA控制台输入(Scanner)及输出颜色「终于解决」,希望能够帮助你!!!。
这里介绍如何控制java控制台输入输出内容的颜色。
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//next方式接收字符串(不可以接收空格)
System.out.println("Next方式接收:");
//判断用户还有没有输入字符
if (scanner.hasNext()) {
String str = scanner.next();
System.out.println("输入内容:" + str);
}
// 凡是属于IO流的类如果不关闭会一直占用资源.要养成好习惯用完就关掉.
// 就好像你接水完了要关 水龙头一样.很多下载软件或者视频软件如果你不彻底关,
// 都会自己上传下载从而占用资源,你就会觉得 卡,这一个道理.
scanner.close();
}
接下来我们使用另一个方法来接收数据:nextLine()
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//nextLine方式接收字符串(可以接收空格)
System.out.println("NextLine方式接收:");
//判断用户还有没有输入字符
if (scanner.hasNextLine()) {
String str = scanner.nextLine();
System.out.println("输入内容:" + str);
}
// 凡是属于IO流的类如果不关闭会一直占用资源.要养成好习惯用完就关掉.
// 就好像你接水完了要关 水龙头一样.很多下载软件或者视频软件如果你不彻底关,
// 都会自己上传下载从而占用资源,你就会觉得 卡,这一个道理.
scanner.close();
}
next 和 nextLine的区别
next():
一定要读取到有效字符后才可以结束输入。
对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
nextLine():
以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
可以获得空白。
在java语言中,可以通过\033特殊转义字符实现输出格式控制,如下是一个例子。
public class MYJ2CTestOutputControl {
/**
* 通过\033特殊转义字符实现输出格式控制 * @param content, 待格式化的内容
* @param fontColor, 字体颜色:30黑 31红 32绿 33黄 34蓝 35紫 36深绿 37白
* @param fontType, 字体格式:0重置 1加粗 2减弱 3斜体 4下划线 5慢速闪烁 6快速闪烁
* @param backgroundColor, 字背景颜色:40黑 41红 42绿 43黄 44蓝 45紫 46深绿 47白
* */
public static String getFormatOutputString(String content, int fontColor, int fontType, int backgroundColor){
return String.format("\033[%d;%d;%dm%s\033[0m", fontColor, fontType, backgroundColor, content);
}
/**
* 通过\033特殊转义字符实现输出格式控制,获得带颜色的字体输出 * @param content, 待格式化的内容
* @param fontColor, 字体颜色:30黑 31红 32绿 33黄 34蓝 35紫 36深绿 37白
* */
public static String getColoredOutputString(String content, int fontColor){
return String.format("\033[%dm%s\033[0m", fontColor, content);
}
/**
* 通过\033特殊转义字符实现输出格式控制,获得带背景颜色的字体输出 * @param content, 待格式化的内容
* @param backgroundColor, 字背景颜色:40黑 41红 42绿 43黄 44蓝 45紫 46深绿 47白
* */
public static String getBackgroundColoredOutputString(String content, int backgroundColor){
return String.format("\033[%dm%s\033[0m", backgroundColor, content);
}
/**
* 能接受一个顺序标识,按顺序产生带颜色的输出字符串 * */
public static String orderedColorString(String content, int i){
int tmpColor = 31 + (i % 7);
return String.format("\033[%dm%s\033[0m", tmpColor, content);
}
public static void main(String []args){
System.out.println(getFormatOutputString("字体颜色为红色,背景色为黄色,带下划线", 31, 4, 43));
//按顺序输出各个颜色代码的字符串
for(int i = 0; i < 7; i++){
System.out.println(getColoredOutputString(String.format("color code: %d", 31 + i), 31 + i));
}
//按顺序输出各个背景颜色代码的字符串
for(int i = 0; i < 7; i++){
System.out.println(getBackgroundColoredOutputString(String.format("background color code: %d", 41 + i), 41 + i));
}
//按顺序输出各个颜色代码的字符串
for(int i = 0; i < 7; i++){
System.out.println(orderedColorString(String.format("font color code: %d", 31 + i), i));
}
}
}
运行前面的程序,可以看到如下输出。
这里是一个例子,主要是展示java字符串不同编码格式的输出。
/**
* Created by chengxia on 2022/8/19. */
public class MYJ2CTestOutputControl {
/**
* 通过\033特殊转义字符实现输出格式控制 * @param content, 待格式化的内容
* @param fontColor, 字体颜色:30黑 31红 32绿 33黄 34蓝 35紫 36深绿 37白
* @param fontType, 字体格式:0重置 1加粗 2减弱 3斜体 4下划线 5慢速闪烁 6快速闪烁
* @param backgroundColor, 字背景颜色:40黑 41红 42绿 43黄 44蓝 45紫 46深绿 47白
* */
public static String getFormatOutputString(String content, int fontColor, int fontType, int backgroundColor){
return String.format("\033[%d;%d;%dm%s\033[0m", fontColor, fontType, backgroundColor, content);
}
/**
* 通过\033特殊转义字符实现输出格式控制,获得带颜色的字体输出 * @param content, 待格式化的内容
* @param fontColor, 字体颜色:30黑 31红 32绿 33黄 34蓝 35紫 36深绿 37白
* */
public static String getColoredOutputString(String content, int fontColor){
return String.format("\033[%dm%s\033[0m", fontColor, content);
}
/**
* 通过\033特殊转义字符实现输出格式控制,获得带背景颜色的字体输出 * @param content, 待格式化的内容
* @param backgroundColor, 字背景颜色:40黑 41红 42绿 43黄 44蓝 45紫 46深绿 47白
* */
public static String getBackgroundColoredOutputString(String content, int backgroundColor){
return String.format("\033[%dm%s\033[0m", backgroundColor, content);
}
/**
* 能接受一个顺序标识,按顺序产生带颜色的输出字符串 * */
public static String orderedColorString(String content, int i){
int tmpColor = 31 + (i % 7);
return String.format("\033[%dm%s\033[0m", tmpColor, content);
}
/**
* 将字符串str用字符c左补齐到长度len * */
private static String lpadString(String str, int len, char c){
StringBuffer sb = new StringBuffer(str);
for(int i = str.length(); i < len; i++){
sb.insert(0, c);
}
return sb.toString();
}
/**
* 将字符串转换为CodeUnit(各个CodeUnit之间带颜色区分) * */
public static String getColoredCodeUnitOfString(String str){
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length(); i++){
int tmpCodeUnit = (int)str.charAt(i);
sb.append(orderedColorString(lpadString(Integer.toHexString(tmpCodeUnit), 4, '0').toUpperCase(), i));
}
return sb.toString();
}
/**
* 将字符串转换为CodePoint(各个CodePoint之间带颜色区分) * */
public static String getColoredCodePointOfString(String str){
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length(); i++){
int tmpCodePoint = (int)str.codePointAt(i);
sb.append(orderedColorString(lpadString(Integer.toHexString(tmpCodePoint), 4, '0').toUpperCase(), i));
//如果当前这个CodePoint是增补字符集的话,两个char表示一个CodePoint需要额外自增1处理
if(Character.isSupplementaryCodePoint(tmpCodePoint)){
i++;
}
}
return sb.toString();
}
/**
* 将字符串转换为不同编码格式表示(各个字符的编码之间带颜色区分) * */
public static String getColoredHexEncodeOfString(String str, String encoding){
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length(); i++){
int tmpCodePoint = (int)str.codePointAt(i);
String tmpSubStr = str.substring(i, i + 1);
//如果当前这个CodePoint是增补字符集的话,两个char表示一个CodePoint
if(Character.isSupplementaryCodePoint(tmpCodePoint)){
tmpSubStr = tmpSubStr + str.substring(i + 1, i + 2);
i++;
}
try{
StringBuffer tmpSb = new StringBuffer();
byte[] tmpBytes = tmpSubStr.getBytes(encoding);
for(int iTmp = 0; iTmp < tmpBytes.length; iTmp++){
tmpSb.append(String.format("%02X", tmpBytes[iTmp]));
}
sb.append(orderedColorString(tmpSb.toString(), i));
}catch (Exception e){
e.printStackTrace();
}
}
return sb.toString();
}
public static void main(String []args){
String strDiffEncoding = "MYJ2C是一款Java混淆工具";
//将字符串用各种编码格式输出
System.out.println("?" + " encode in GB2312 output: " + getColoredHexEncodeOfString("?", "GB2312"));
System.out.println("?" + " encode in GBK output: " + getColoredHexEncodeOfString("?", "GBK"));
System.out.println("?" + " encode in GB18030 output: " + getColoredHexEncodeOfString("?", "GB18030"));
System.out.println(strDiffEncoding + " code unit output: " + getColoredCodeUnitOfString(strDiffEncoding));
System.out.println(strDiffEncoding + " code point output: " + getColoredCodePointOfString(strDiffEncoding));
System.out.println(strDiffEncoding + " encode in GB2312 output: " + getColoredHexEncodeOfString(strDiffEncoding, "GB2312"));
System.out.println(strDiffEncoding + " encode in BIG5 output: " + getColoredHexEncodeOfString(strDiffEncoding, "BIG5"));
System.out.println(strDiffEncoding + " encode in GBK output: " + getColoredHexEncodeOfString(strDiffEncoding, "GBK"));
System.out.println(strDiffEncoding + " encode in GB18030 output: " + getColoredHexEncodeOfString(strDiffEncoding, "GB18030"));
System.out.println(strDiffEncoding + " encode in UTF-8 output: " + getColoredHexEncodeOfString(strDiffEncoding, "UTF-8"));
System.out.println(strDiffEncoding + " encode in UTF-16 output: " + getColoredHexEncodeOfString(strDiffEncoding, "UTF-16"));
System.out.println(strDiffEncoding + " encode in UTF-16BE output: " + getColoredHexEncodeOfString(strDiffEncoding, "UTF-16BE"));
System.out.println(strDiffEncoding + " encode in UTF-16LE output: " + getColoredHexEncodeOfString(strDiffEncoding, "UTF-16LE"));
}
}
输出如下:
从这个结果可以看出,当一个字符在编码中不存在,找不到映射时,这个字符就会被映射为问号。