当前位置: 首页 > 知识库问答 >
问题:

С检查代码中的缩进是否与空格和制表符混合

商辰钊
2023-03-14

我需要检查代码不混合缩进空白和制表符。

如果同时满足以下两个条件,则代码中会混合空格和制表符:

  1. 有些行包含一个空格,直到第一个非空白字符(或行尾)

这是我一直想做的

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("input.txt");
        Scanner sc = new Scanner(fis);
        boolean flag1 = false;
        boolean flag2 = false;
        while (sc.hasNextLine()) {
            String str = sc.nextLine();
            for(int i = 1; i < str.length(); i++){
                if((str.charAt(0) == ' ') && (str.charAt(i) != ' ')) {
                    flag1 = true;
                    break;
                }
            }
            System.out.println(flag1);
            for(int i = 0; i < str.length(); i++){
                int ind = str.indexOf("\t");
                int ind2 = -1;
                if(str.indexOf("\t") != -1){
                    if((str.charAt(i) != ' ') && (str.charAt(i) != '\t')) {
                        ind2 = str.indexOf(str.charAt(i));
                        if (ind < ind2) {
                            flag2 = true;
                        }
                    break;
                    }
                }
            }
            if (flag1 && flag2){
                break;
            }
        }
        FileOutputStream fos = new FileOutputStream("output.txt");
        PrintWriter pw = new PrintWriter(fos);
        if(flag1 == true && flag2 == true){
            System.out.println("NO");
        } else {
            System.out.println("YES");
        }
    }
}

但是当输入是

  // whitespace
        // tab 

输入示例:

public class Main 
{
  public static void main(String[]  args) 
  {
  }}

输出

YES

你能解释一下我该怎么解决这个问题吗?

共有2个答案

朱伯寅
2023-03-14

正如Piotr所建议的,最好的解决方案是使用正则表达式(比我认为的循环更有效),下面是我是如何做到的,

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("input.txt");
        Scanner sc = new Scanner(fis);
        boolean flag1 = false;
        boolean flag2 = false;
        while (sc.hasNextLine()) {
            String str = sc.nextLine();
            
            // matches spaces
            Pattern pattern1 = Pattern.compile("^\\s*[ ]+\\s*[^\\s]+");
            Matcher matcher1 = pattern1.matcher(str);
            flag1 = matcher1.find();
            
            // matches tabs
            Pattern pattern2 = Pattern.compile("^\\s*[\t]+\\s*[^\\s]+");
            Matcher matcher2 = pattern2.matcher(str);
            flag2 = matcher2.find();
            
            if (flag1 && flag2){
                break;
            }
        }
        FileOutputStream fos = new FileOutputStream("output.txt");
        PrintWriter pw = new PrintWriter(fos);
        if(flag1 == true && flag2 == true){
            System.out.println("NO");
        } else {
            System.out.println("YES");
        }
    }
}
吕灿
2023-03-14

您的代码似乎过于复杂。重新措辞作业:

检查所有前导空格,即检查所有缩进。如果同时找到空格和制表符,则输入具有混合缩进。

try (Scanner sc = new Scanner(new FileInputStream("input.txt"))) {
    boolean foundSpace = false, foundTab = false;
    while ((! foundSpace || ! foundTab) && sc.hasNextLine()) {
        String line = sc.nextLine();
        for (int i = 0; i < line.length(); i++) {
            char ch = line.charAt(i);
            if (ch == ' ')
                foundSpace = true;
            else if (ch == '\t')
                foundTab = true;
            else
                break; // end of leading white-spaces
        }
    }
    System.out.println(foundSpace && foundTab ? "NO" : "YES");
}
 类似资料:
  • 选项卡和空格混合用于相同的项目。 我需要代码缩进,但不要用空格替换制表符,反之亦然。我只需要缩进代码(带空格或制表符的新缩进并不重要)。 使用Eclipse IDE,但欢迎插件或其他工具。 另外,我知道在同一个项目中,使用相同的空白策略(制表符或白色)更好。 例如\t-- 之前 之后

  • 问题内容: 在某处是否有标准的Google Go编码约定文档来设置制表符或空格在Go源代码中缩进是首选?如果不是,那么(统计上)更流行的选择是什么? 官方的建议是什么?(如果有) 最受欢迎的选择是什么? 问题答案: 官方建议使用以下格式格式化代码 或直接使用gofmt命令 您可以在golang.org博客上或“ 有效” go 文档中了解有关此内容的更多信息: 缩进 我们使用缩进标签,默认情况下go

  • Java15引入了(非预览)文本块功能。它允许在不破坏代码缩进的情况下定义多行字符串文字,方法是从行中去掉公共空白前缀。JEP 378中描述了该算法。 但是,在使用制表符和空格组合缩进行的情况下,“公共空白前缀”是如何定义的呢? 例如,在下列情况下(表示空格,

  • 问题内容: 我决定学习一点Python。第一部分介绍说它使用缩进来对语句进行分组。虽然最好的习惯显然是仅使用其中一种,但是如果我互换它们会发生什么呢?多少个空格将被视为等于一个制表符?如果将制表符和空格混合使用,还是根本无法工作? 问题答案: 空格不等同于制表符。用制表符缩进的行与用1、2、4 或8个 空格缩进的行的缩进不同。 通过反例证明( 错误或至多限制-tab!= 4个空格 ): 的‘显示一

  • 问题内容: 我是Python的新手。上面粘贴的程序特别在“ if temp == dna2:”行给我一个错误“缩进中的制表符和空格的不一致使用”。有人可以帮我找出缩进不正确的地方吗? 问题答案: 这意味着您在缩进中混合了空格和制表符。您必须解决此问题,使其与制表符或空格保持一致。

  • 问题内容: 我试图在Python 3.2中创建应用程序,并且一直使用制表符进行缩进,但是即使编辑器也将其中的一些更改为空格,然后在尝试运行时打印出“不一致使用制表符和空格”该程序。 如何将空格更改为制表符?这让我疯狂。(我是编程的初学者)。如果我能在代码中获得一些总体提示,我会很高兴,如果我犯了很多错误,我会很高兴听到。 问题答案: 不要使用标签。 将你的编辑器设置为使用4个空格进行缩进。 搜索并