vim - 如何自动计算和更改文本文件(Java 类)中的数字?

标签 vim text-manipulation

假设我有一个像 the one from Oracle’s example 这样的枚举类:

public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms
    private final double radius; // in meters
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }
    private double mass() { return mass; }
    private double radius() { return radius; }

    // universal gravitational constant  (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;

    double surfaceGravity() {
        return G * mass / (radius * radius);
    }
    double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }
    //...

我需要将类中的所有数字乘以 0.33。我不想在枚举中编写计算代码,而是想更改文本本身。在 Vim/IDEA/任何其他工具中实现自动化的最快方法是什么?

最佳答案

使用 vim,我会尝试以下操作:

:% s /\(\d\+\.\d\+\)/\=(submatch(1) * 0.33)/gc 

这将匹配整个文件 (%) 中的每个数字 (\d+.\d+),并将其替换为 (*) 匹配数字 (submatch(1)) 乘以 (*) 的结果 (\=) 0.33。

关于vim - 如何自动计算和更改文本文件(Java 类)中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19367437/

相关文章:

vim - 在VIM中用鼠标复制文本,为什么不起作用?

regex - vim:替换特定字符,但仅在第 n 次出现后

python - 我应该了解 Python 哪些知识才能识别不同源文件中的注释?

regex - 如何删除文本文件中第一个空格后每一行中的所有字符?

macros - 如何在不添加 <LF> 的情况下将以 <CR> 结尾的字符串分配给 vimscript 变量?

tags - ctrl-] 不适用于 tcl 代码导航

vim - vim 如何在相同行数的前面插入多行?

linux - 如何通过 vim 从多个文件中添加/删除相同的文本行?

Java 正则表达式 : newline + white space