杰瑞科技汇

Java字符串打印为何输出异常?

下面我将从最基础到更高级的用法,为你详细解释如何打印字符串。

最基本的方法:System.out.println()

这是最常用、最直接的方法,它会将字符串输出到控制台(标准输出流),并在末尾自动换行。

语法: System.out.println(要打印的内容);

示例代码:

public class PrintStringExample {
    public static void main(String[] args) {
        String message = "你好,世界!";
        System.out.println(message);
        // 也可以直接打印一个字符串字面量
        System.out.println("这是一个直接的字符串。");
    }
}

输出结果:

你好,世界!
这是一个直接的字符串。

其他常用方法

除了 println()System.out 对象还提供了其他几个相关的方法:

System.out.print()

println() 类似,但它不会在打印后自动换行,如果后续的打印内容在同一行,它们会紧挨着。

示例代码:

public class PrintStringExample2 {
    public static void main(String[] args) {
        System.out.print("第一部分");
        System.out.print("第二部分");
        System.out.println("(这里换行)"); // 这个方法会换行
    }
}

输出结果:

第一部分第二部分(这里换行)

System.out.printf() (格式化输出)

当你需要按照特定格式输出字符串或变量时,printf() 非常有用,它类似于 C 语言中的 printf 函数。

语法: System.out.printf(格式化字符串, 参数1, 参数2, ...);

格式化说明符:

  • %s: 字符串
  • %d: 十进制整数
  • %f: 浮点数
  • %c: 字符
  • %n: 平台无关的换行符 (推荐使用,而不是 \n)

示例代码:

public class PrintfExample {
    public static void main(String[] args) {
        String name = "张三";
        int age = 30;
        double score = 95.5;
        // 使用 %s, %d, %f 格式化输出
        System.out.printf("姓名: %s, 年龄: %d, 分数: %.2f%n", name, age, score);
        // 也可以直接格式化字符串字面量
        System.out.printf("你好, %s! 今天是星期几?%n", name);
    }
}

输出结果:

姓名: 张三, 年龄: 30, 分数: 95.50
你好, 张三! 今天是星期几?

注意:%.2f 表示保留两位小数的浮点数。


打印复杂对象(多行字符串)

如果你需要打印一个包含换行符的多行字符串,有几种方式:

在字符串中使用 \n

String multiLineString = "这是第一行\n这是第二行\n这是第三行";
System.out.println(multiLineString);

使用文本块 (Java 13+ 预览特性,Java 15+ 正式特性)

这是处理多行字符串最现代、最优雅的方式,它使用三个双引号 包裹内容,并自动保留格式和换行。

// 需要 Java 13 或更高版本,并可能需要开启预览功能 (在编译时加 --enable-preview)
// Java 15+ 默认支持
String multiLineBlock = """
    这是第一行,
    这是第二行,
    这是第三行。
    """;
System.out.println(multiLineBlock);

调试技巧:System.out.println() 的替代品

在开发过程中,我们经常需要打印变量来调试代码,虽然 System.out.println() 很方便,但在大型项目中,更推荐使用专业的日志框架。

使用 StringBuilderStringBuffer 拼接复杂信息

当需要打印多个变量时,频繁使用 号拼接字符串在循环中性能较差,可以使用 StringBuilder

int a = 10;
int b = 20;
String s = "结果";
// 不推荐的方式(性能较差)
System.out.println("a的值是" + a + ",b的值是" + b + "," + s);
// 推荐的方式(性能更好)
StringBuilder sb = new StringBuilder();
sb.append("a的值是").append(a)
  .append(",b的值是").append(b)
  .append(",").append(s);
System.out.println(sb.toString());

使用日志框架 (如 SLF4J + Logback)

这是企业级应用的标准做法,日志框架提供了不同的日志级别(如 INFO, DEBUG, ERROR),并且可以轻松地控制日志的输出位置(控制台、文件等)。

示例 (使用 SLF4J): 你需要添加依赖(如 slf4j-apilogback-classic)。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggingExample {
    // 1. 创建一个 Logger 实例
    private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class);
    public static void main(String[] args) {
        String user = "admin";
        logger.info("用户 {} 登录系统", user); // 使用占位符,性能更好
        // 在调试模式下,可以打印更详细的信息
        if (logger.isDebugEnabled()) {
            logger.debug("当前内存使用情况: {}", Runtime.getRuntime().freeMemory());
        }
    }
}

优点:

  • 性能: 日志框架有异步日志等高级特性,对应用性能影响小。
  • 灵活性: 可以轻松配置日志级别,只输出需要的日志。
  • 功能强大: 支持日志文件滚动、按日期分割等。

方法 描述 示例
System.out.println() 最常用换行 System.out.println("Hello");
System.out.print() 不换行 System.out.print("Hello ");
System.out.printf() 格式化输出,非常灵活。 System.out.printf("Name: %s", "Alice");
文本块 Java 15+,优雅地处理多行字符串 String s = """..."""
日志框架 生产环境推荐,用于调试和记录应用运行状态。 logger.info("User logged in");

对于初学者和简单的控制台程序,System.out.println() 是你的首选,对于任何正式的项目,请尽早学习和使用日志框架。

分享:
扫描分享到社交APP
上一篇
下一篇