Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按长字符串中的单词统计Java统计信息

按长字符串中的单词统计Java统计信息
EN

Stack Overflow用户
提问于 2013-04-14 14:32:08
回答 1查看 745关注 0票数 0

我正在用java编写一个程序来获取一个非常大的字符串(string s <= 100000)中单词的统计数据。这应该需要不到1秒的时间,并且使用少于16MB的内存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Scanner;
class Main{
 public static void main(String[] args){


  Scanner sc = new Scanner(System.in);
  String t = sc.nextLine();
  int i=0;
  while(t.charAt(i)==' ') i++;
  t = t.substring(i);
  String[] s = t.split(" +");

  RecString[] stat  = new RecString[s.length];
  for(i=0; i<s.length;i++){
    stat[i] = new RecString("");  
  }
  int j=0;
  for(i=0; i<s.length;i++){
    int f=0;
    for(int h =0; h<stat.length; h++){
     if(stat[h].word.equals(s[i])){
       f = 1;
       stat[h].count++;
       break;
     }
    }
    if(f==0){
      stat[j] = new RecString(s[i]);
      j++;
    }
  }
  for(i=0;i<=j;i++){
   if(stat[i].word != ""){
      System.out.println(stat[i].word+" "+(stat[i].count));
   }
  }


 }
}

class RecString{
    public  String word;
    public  int count;

    public RecString(String s){
        word = s;
        count = 1;
    }

}

此代码适用于长度为<=255的字符串,但对于大字符串,我有时间或/和内存限制。

请帮我优化我的程序

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-14 14:57:19

如果你关心内存,你会想要尝试尽可能多地流传输。

请参阅http://docs.oracle.com/javase/6/docs/api/java/io/StreamTokenizer.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
StreamTokenizer tokenizer = new StreamTokenizer(new InputStreamReader(System.in));

while(tokenizer.nextToken() != StreamTokenizer.TT_EOF){

    if(tokenizer.ttype == StreamTokenizer.TT_WORD) {
        // found a word.
        System.out.println(tokenizer.sval);
    }
}

当然,如果内存不是问题,速度是您唯一关心的问题,那么Hadoop有一个很好的单词计数示例:http://wiki.apache.org/hadoop/WordCount。但是把它留到学习的不时之需。

此外,你的计算单词的逻辑对于效率(它的O(N))是不正确的。@DaveNewton是正确的,你可能应该使用一个Map<String,Integer>,它会给你一个O(1),而不是你的RecString数组。我不打算纠正你的结论,因为我认为这是一个很好的练习。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16000175

复制
相关文章
Java开发 窗体JFrame
package expression; import java.awt.Color; import java.awt.Container; import javax.swing.*; public class Demo extends JFrame{//继承父类 public Demo(){ setVisible(true);//设置窗体可见 setTitle("窗体标题"); /*窗体关闭规则 * EXIT_ON_CLOSE 关闭窗体,并停止程序 * DO_NOTH
用户2965768
2019/02/26
1.5K0
初学java之JFrame窗口模式
1 package project; 2 import javax.swing.*; 3 import java.awt.*; 4 public class test 5 { 6 public static void main(String args[]) 7 { 8 JFrame window1 , window2; 9 window1 = new JFrame("第一个"); 10 window2 = new JFrame("第二个");
Gxjun
2018/03/22
1.3K0
Java将内容追加/添加到现有文件
如果您希望代码创建一个新文件并删除以前的现有文件,则FileWriter可以轻松代替它。要替换现有文件中的所有内容,请使用以下命令:
用户7886150
2021/04/28
3.1K0
Java---将图片置灰
package image; import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.ColorConvertOp; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import j
IT云清
2019/01/22
7570
将Sublime添加到鼠标右键
2、找到 HKEY_CLASSES_ROOT/*/shell 目录,在此目录下操作。
新码农
2020/03/05
3K0
JAVA学习中Swing概述中的JFrame学习
别先生
2017/12/29
1.7K0
Java将图片转Base64
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
程序员云帆哥
2022/05/12
1.9K0
将Windows Terminal添加到鼠标右键
导读 非常实用的小技巧。 下载Windows Terminal图标,右键另存为。 [WindowsTerminal图标] 保存至'C:\Users\Administrator\AppData\Local\Terminal\Terminal.ico'。 win+R输入'regedit',打开注册表。 找到'HKEY_CLASSES_ROOT\Directory\Background\shell'目录,在此目录下操作。 新建项'wt',双击右边'默认',更改右键文字显示内容'Windows Terminal H
新码农
2020/08/05
3.6K0
将Windows Terminal添加到鼠标右键
java学习之路:30.JFrame窗体,JDIalog窗体
开头说一下,如果使用 import java.awt.*; import javax.swing.*; 出现错误,请查看: 解决无法使用java.awt.和javax.swing. 1.JFrame窗体 package number; import java.awt.*; import javax.swing.*; public class Xuexi extends JFrame{ public void CreateJFrame(String title) { JFrame jf =new JFr
花狗Fdog
2020/10/28
2.2K0
java学习之路:30.JFrame窗体,JDIalog窗体
将Emoji表情添加到项目中 顶
选择完需要的表情,点击消息预览就可以看到效果了,有一个微笑表情是QQ表情~~ 可以不用管它。
linapex
2019/03/26
1.8K0
将Emoji表情添加到项目中
                                                    顶
dart - 将 orElse 函数添加到 firstWhere 方法
我正在尝试将 onElse 函数添加到 iterator.firstWhere 方法,但我无法获得正确的语法。 我试过类似的东西
徐建国
2021/08/31
1.6K0
将程序添加到右键菜单快速启动
打开注册表编辑器:按下 Win + R 键,输入 regedit,然后按回车键打开注册表编辑器。
浪漫主义狗
2023/09/04
4590
将程序添加到右键菜单快速启动
将 Fedora Linux 系统添加到企业域中
在企业互联网场景中,一般情况下最广泛使用的基于 Linux 的操作系统是 Red Hat Enterprise Linux(RHEL),它主要用于服务器,但也可以用作工作站。Fedora linux 其实也是工作站系统的一个很好的选择,它提供了许多在企业环境中工作的特性,使管理成为一项简单的任务。
用户1880875
2021/09/06
1.6K0
将外链图片添加到WordPress媒体库中的插件:External Media without Import
默认情况下,图片只有在WordPress后台上传才能显示在媒体库中,如果想节省主站的空间和流量,图片放在另外的服务器或者让其它网站的外链图片,也显示在媒体库中方便调用,可以使用External Media without Import插件实现这个功能。
星哥玩云
2022/06/11
2.7K0
将外链图片添加到WordPress媒体库中的插件:External Media without Import
Windows下将cmd命令添加到右键菜单
将下列文本复制到文件,保存为 *.reg 格式: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here] @="在此处打开cmd" "Icon"="cmd.exe" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here\command] @="\"C:\
Daotin
2020/12/14
2K0
如何使用ReconAIzer将OpenAI添加到Burp中
ReconAIzer是一款功能强大的Burp Suite扩展,该工具基于Jython开发,可以为Burp Stuite添加OpenAI能力,并利用OpenAI来优化和增强渗透测试过程中的网络侦查任务。该工具专为漏洞猎人和渗透测试人员设计,支持以自动化的形式执行多种网络安全任务,可以帮助广大安全研究人员以简单快速的形式识别和利用漏洞。
FB客服
2023/08/08
2930
如何使用ReconAIzer将OpenAI添加到Burp中
OpenStack命令将卷添加到虚拟机上
首先加载权限 [root@controller ~]# . admin-openrc
院长技术
2020/06/15
1.5K0
JAVA学习Swing章节标签JLabel中图标的使用
别先生
2017/12/29
1.9K0
JAVA学习Swing章节标签JLabel中图标的使用
技术分享 | 将GreatSQL添加到系统systemd服务
systemd 是Linux系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程,systemd被设计用来改进原来sysvinit中的多个缺点。
老叶茶馆
2021/07/09
1.3K0
解决将Editplus添加到鼠标右键的问题
以管理员身份运行EditPlus 一次点击–>工具–>首选项–>常规–>勾选将EditPlus添加到系统右键菜单选项
别团等shy哥发育
2023/02/25
1.4K0
解决将Editplus添加到鼠标右键的问题

相似问题

尝试将图像添加到JFrame

20

将背景图片添加到JFrame

32

Java -将照片添加到JFrame

17

如何将图片添加到JFrame标题栏?

10

尝试/捕捉java无法将jpanel放入jframe中

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文