使用python获取Java文件中的行长度

使用python获取Java文件中的行长度,python,Python,我希望能够使用python忽略空格和空白来获得java文件每行的长度。我最终会将每一行长度放入一个数组中。以这个java文件为例: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world"); } } 此文件的数组将读取: {22,34,33,1,1,} 最好的办法是什么?我完全有能力创建数组,但如何才能找到每行

我希望能够使用python忽略空格和空白来获得java文件每行的长度。我最终会将每一行长度放入一个数组中。以这个java文件为例:

public class HelloWorld {

    public static void main(String[] args) {
         System.out.println("Hello world");
    } 

}
此文件的数组将读取:

{22,34,33,1,1,}

最好的办法是什么?我完全有能力创建数组,但如何才能找到每行的长度呢?

请执行以下操作:

    for line in open('file.java', 'r'):
        lineLength = len(line.replace(' ', ''))

这样做:

    for line in open('file.java', 'r'):
        lineLength = len(line.replace(' ', ''))

Python中的
{a,b,c}
表示法是一个
集合
,您不需要它(不允许重复项);尝试一个
列表
[a,b,c]

要删除行首和行尾的空白,请使用
str.strip()
;这将删除行首和行尾的制表符/空格/换行符。要删除行内的空格,请使用
str.replace(“”,”)
。去掉多余字符后,行的长度就是
len(line)

对于文件
f
,您可以使用列表理解一步创建列表:

output = [len(l) for l in (line.strip().replace(' ', '') 
                           for line in f) if len(l) > 0]

给我
[22,35,33,1,1]

Python中的
{a,b,c}
符号是一个
集合,您不需要它(不允许重复项);尝试一个
列表
[a,b,c]

要删除行首和行尾的空白,请使用
str.strip()
;这将删除行首和行尾的制表符/空格/换行符。要删除行内的空格,请使用
str.replace(“”,”)
。去掉多余字符后,行的长度就是
len(line)

对于文件
f
,您可以使用列表理解一步创建列表:

output = [len(l) for l in (line.strip().replace(' ', '') 
                           for line in f) if len(l) > 0]

给我
[22,35,33,1,1]

集中在您的问题“我如何才能找到每行的长度?”的部分,您可以使用此代码

bad_chars = ' \t\n\r'

def count_chars():
    with open('someclass.java', 'r') as javafile:
        for line in javafile:
            cleaned = filter(lambda c: c not in bad_chars, line)
            if cleaned:
                yield len(cleaned)
您当然可以而且应该重构它以满足您的需要(可能将java文件名作为函数参数),但这应该提供非空白计数,定义为不在
坏字符中包含字符

返回:

>>> print list(count_chars())
[22, 35, 33, 1, 1]

专注于你的问题“我如何才能找到每行的长度?”的一部分,你可以使用下面的代码

bad_chars = ' \t\n\r'

def count_chars():
    with open('someclass.java', 'r') as javafile:
        for line in javafile:
            cleaned = filter(lambda c: c not in bad_chars, line)
            if cleaned:
                yield len(cleaned)
您当然可以而且应该重构它以满足您的需要(可能将java文件名作为函数参数),但这应该提供非空白计数,定义为不在
坏字符中包含字符

返回:

>>> print list(count_chars())
[22, 35, 33, 1, 1]
这应该起作用:

with open('input') as f:
    output = []
    for line in f:
        line = line.split()
        if line != [] :
            line = "".join(line)
            output.append(len(line))
    print output
这应该起作用:

with open('input') as f:
    output = []
    for line in f:
        line = line.split()
        if line != [] :
            line = "".join(line)
            output.append(len(line))
    print output

您可以将文件拆分为一个行数组,并通过行[i]进行迭代,获得其长度。count()?在将空白替换为零后,可以使用内置len()。第二行如何获得34?您可以将文件拆分为一个行数组,并通过行[i]进行迭代,获得其长度。count()?在将空白替换为零后,可以使用内置len()。第二行如何得到34?他的预期输出与每行中的非空白字符数匹配,而不仅仅是在末尾。另外,他说“忽略空格和空白”。啊,谢谢。。。第二行我还是没拿到34分。。。是的,阅读理解:是啊,我不确定是我算错了还是他算错了,但我数了35个非空白字符,有空白的会接近40个。他的预期输出匹配每行中非空白字符的数量,而不仅仅是结尾。另外,他说“忽略空格和空白”。啊,谢谢。。。第二行我还是没拿到34分。。。但是是的阅读理解:是啊,不确定是我算错了还是他算错了,但我数了35个非空格,有空格的会接近40个。OP想要去掉空格,而不仅仅是“”。OP想要去掉空格,而不仅仅是“”。