请用java编程:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请用java编程:相关的知识,希望对你有一定的参考价值。

1.将一个千千静听中的歌词文件(.lrc)作为数据源,按行读入,并将每行歌词前的时间格式字符去掉(如:[00:00.62]),将歌名和歌词按行写入一个新文件中,文件名和歌词文件名相同,后缀名为txt;

参考技术A import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Lyric2Text 
 
 public void doWork(String lyric) throws IOException
  BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(lyric), "utf8"));
  BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(lyric.substring(0, lyric.lastIndexOf('.')) + ".txt"), "utf8"));
  String line;
  while((line = reader.readLine()) != null)
   line = line.replaceAll("\\\\[[0-9:\\\\.]+\\\\]", "");
   writer.write(line + "\\n");
  
  
  reader.close();
  writer.close();
 
 
 public static void main(String[] args) throws IOException 
  Lyric2Text tmp = new Lyric2Text();
  tmp.doWork("C:\\\\Users\\\\admin\\\\Desktop\\\\一帘幽梦.lrc");
 

 

请用指针解释数组[关闭]

【中文标题】请用指针解释数组[关闭]【英文标题】:Please explain arrays with pointers [closed] 【发布时间】:2017-02-06 08:49:18 【问题描述】:

所以我是编程新手,我想了解我的教授在这个程序中使用指针。

#include <iostream>
using namespace std;

typedef int* IntPtr;

int main()

    IntPtr p;
    int a[10];
    int i;

    for(i = 0; i<10; i++)
        a[i] = i;

    p = a;

    for(i = 0; i<10; i++)
        cout << p[i]<< " ";
    cout << endl;
 

输出: 0 1 2 3 4 5 6 7 8 9

根据我读到的'p = a'会将数组第一个元素的地址传递给'p'。所以我假设输出将全为零。但是当它打印时,它具有与数组“a”相同的元素。就像它把 a 的所有元素的地址传递给 p 一样。有人可以解释为什么。抱歉,如果我不能很好地解释这个问题,但我希望你明白我的意思。

【问题讨论】:

如果您是新手,请远离数组和指针,还有更重要的东西要学习。话虽如此,您是在说p = a;,然后期望p 的行为与a 不同。为什么? typedef int* :( 为什么,哦,为什么你的教授会通过在 typedef 中隐藏指针来使程序更难理解。千万不要在实际程序中这样做,除非函数指针可能变得不可读否则。 【参考方案1】:

通过a[i]p[i] 访问元素,其中a 为数组类型,p 为指针类型,称为下标运算符,您可以阅读其语义,例如,@987654321 @:

... 表达式 E1[E2] 与表达式 *(E1 + E2)

完全相同

这意味着p[i]*(p + i) 相同,即它取消引用内存地址(p+i) 处的值,而i 使用sizeof(int) 正确计数,因为p 是指向@987654332 的指针@。如果p 指向a,这与a[i] 完全相同,这又与*(a+i) 相同,其中a 衰减为指向数组a 中第一个元素的指针。

希望对你有帮助。

我希望你的教授教授指针、内存布局、解除引用等的含义。恕我直言,对指针和指针算术有信心是几个月(实际上是几年)的问题,而不是“教训”的问题。

【讨论】:

“我希望你的教授教授指针的含义……”——仅此一项对我来说就是一个很大的 +1。当然,您可能需要一些时间来学习并真正理解,但这几个月也可能是您在整个运营商中学到的最重要的东西。 感谢您的解释以及对我帮助很大的链接。刚开始用指针。起初我以为 p 有它自己的元素,现在我觉得很愚蠢,哈哈。我现在完全明白了。【参考方案2】:

实际上很遗憾没有向学生解释内存管理的工作原理......

如果你分配一些东西,它最终会成为一块连续的内存。也就是说:如果你分配一个数组,它就是一个连续内存块中的字节序列

指针只不过是一小块内存(通常是 4 或 8 个字节),其中包含其他东西的地址。例如。它指向数据。

本例中的数组是一个字节序列,因为 int 有 4 个字节,所以它是 40 个字节。取消引用数组中的元素意味着读取索引 X 处的整数。(换句话说:读取从 X*4 到但不包括 (X+1)*4 的 4 个字节——或更准确地说:[X*4, (X+1)*4&gt;)。

使用指针意味着读取地址指向的内容。在这种情况下,指针包含数组第一个元素的地址,因此读取*p 意味着读取数组的前 4 个字节。它是p[0] 的同义词。

这基本上是可行的,因为数组中的数据是连续存储的,并且没有数据被复制。因此,如果您编写a[2] = 2,它只会将名为您的数组的内存块中的字节 2*4 覆盖到 (2+1)*4(更准确地说:[2*4, (2+1)*4&gt;)。它不会复制,更改p中的地址或其他任何内容。

PS:需要注意的一个重要细节是,在 C++ 中分配诸如整数数组之类的东西并不意味着将 everyting 设置为 0。它只是分配了一块具有正确类型的内存。仅此而已。

【讨论】:

只是有点吹毛求疵:“字节 X*4 到 (X+1)*4”总共是 5 个字节而不是 4。稍后当您说“将字节 2*4 覆盖到 (2 +1)*4" 这将是一个字节对多个 @tobi303 嗯,我不是以英语为母语的人,所以我不确定……只是为了确定,'to' 是专有的,对吗? (它是荷兰语) [X*4, (X+1)*4&gt; 在这种情况下是正确的。 不是官方参考,但这也是我理解英语“从...到...”(包括)english.stackexchange.com/a/7872 @tobi303 谢谢,从来不知道;我会记住的。做了一些更改,希望您现在可以批准 :-) 整数数组的初始化实际上意味着设置所有元素。我认为您的意思是数组的 allocation 不一定会执行初始化。

以上是关于请用java编程:的主要内容,如果未能解决你的问题,请参考以下文章

201521123080《Java程序设计》第1周学习总结

用java编程 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

用java编程 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

请用Python语言编程实现由十进制数到二进制数的转换。

201521123087 《Java程序设计》第1周学习总结

分组问题,32个数分8组,每组中数不能有相同的,请用python编程?