java语言怎么统计一个给定字符串中指定字符出现的频率(次数)

java语言怎么统计一个给定字符串中指定字符出现的频率(次数),第1张

哈哈,这个是一种思想,不过也不算复杂的。

比如代码:

String testStr="a1b2c3d4e5";

//这个字符串的长度是10。我们假设就有10个不同的字符。

//用一张2列10行的二维表来描述该情况!这张二维表的第一列表示新出现的字符,对应的第二列表示该字符出现的次数!

主要还是数组遍历查找,得到所有字符(不重复)放到一个2维的存储结构,然后继续统计这些字符的出现次数。

首先有个基本问题需要了解一下:

这里所说java里获得一个进程内存使用情况和cpu运行时间,是指在java内部获取一个纯外部进程的内存与cpu时间呢,还是指在java内部,由java启动的进程的内存与cpu时间。

如果是第一种情况,那你还需要在java内部再起一个进程,通过执行 *** 作系统的shell命令来查看那个进程的运行状态。比如那个外部进程的ID为3119,则执行cat /proc/3119/status | grep VmRSS就可以过滤出该进程的物理内存占用量。

如果是第二种情况,(假定你问的就是这种情况)。

先说内存占用量:一般说来,你可以使用这两种方式获取内存使用情况

方式一:

MemoryMXBean memoryMXBean = ManagementFactorygetMemoryMXBean();

MemoryUsage memoryUsage = memoryMXBeangetHeapMemoryUsage(); //椎内存使用情况

long totalMemorySize = memoryUsagegetInit(); //初始的总内存

long maxMemorySize = memoryUsagegetMax(); //最大可用内存

long usedMemorySize = memoryUsagegetUsed(); //已使用的内存

方式二:

Runtime rt = RuntimegetRuntime();

long totalMemorySize = rttotalMemory(); //初始的总内存

long maxMemorySiz = tmaxMemory(); //最大可用内存

long freeMemorySize = rtfreeMemory(); //当前可用内存

需要说明的是,这种方式获取的是整个jvm的内存使用情况,并不是某一个进程的内存使用情况,事实上,在java内部,可以使用RumtimegetRuntime()exec(${SHELL})来开启一个外部进程(这里${SHELL}代表一个可 *** 作系统的shell命令)。而运行Java程序整个jvm,对于 *** 作系统而言,也仅仅只是一个进程。也就是说,一个jvm就是一个进程,你通过java程序开启的进程都是外部进程,java内部目前还提供了一个destroy方法来销毁该进程,对于该进程的其它信息,都无法直接获取,这些信息的获取,显然需要本地化(Local)的实现。既然标准jdk库没有,就不可能再通过平台无关的代码来实现了。典型的做法就是使用前面第一种情况的方式,再启一个进程,执行shell命令来获取。

不过对于cpu使用时间,采用标准java代码倒是可以拿到。由于java的语法很啰嗦,举一个较完全的例子需要太多的代码,我这里就只写最关键的代码:

ThreadMXBean threadMXBean = ManagementFactorygetThreadMXBean();

① long currentCpuTime = threadMXBeangetCurrentThreadCpuTime(); //当前线程的cpu使用时间

long someThreadId = 709817L; //假定有某个线程的ID是709817

② long someThreadCpuTime = threadMXBeangetThreadCpuTime(someThreadId); //获取ID为someThreadId即709817的线程的cpu时间

基于上面的核心api,你可以把由java启动的外部进程放到一个单独的线程中执行,再用代码②的方式来获取该进程的cpu使用时间,也可以将外部进程放入到当前线程中执行,用① 的方式来获得进程的cpu使用时间。

1得到局域网网段,可由自己机器的IP来确定 (也可以手动获取主机IP-CMD-ipconfig /all)

2根据IP类型,一次遍历局域网内IP地址

JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可

代码如下::

package bean;

import javaio;

import javautil;

public class Ip{

static public HashMap ping; //ping 后的结果集

public HashMap getPing(){ //用来得到ping后的结果集

return ping;

}

//当前线程的数量, 防止过多线程摧毁电脑

static int threadCount = 0;

public Ip() {

ping = new HashMap();

}

public void Ping(String ip) throws Exception{

//最多30个线程

while(threadCount>30)

Threadsleep(50);

threadCount +=1;

PingIp p = new PingIp(ip);

pstart();

}

public void PingAll() throws Exception{

//首先得到本机的IP,得到网段

InetAddress host = InetAddressgetLocalHost();

String hostAddress = hostgetHostAddress();

int k=0;

k=hostAddresslastIndexOf("");

String ss = hostAddresssubstring(0,k+1);

for(int i=1;i <=255;i++){ //对所有局域网Ip

String iip=ss+i;

Ping(iip);

}

//等着所有Ping结束

while(threadCount>0)

Threadsleep(50);

}

public static void main(String[] args) throws Exception{

Ip ip= new Ip();

ipPingAll();

javautilSet entries = pingentrySet();

Iterator iter=entriesiterator();

String k;

while(iterhasNext()){

MapEntry entry=(MapEntry)iternext();

String key=(String)entrygetKey();

String value=(String)entrygetValue();

if(valueequals("true"))

Systemoutprintln(key+"-->"+value);

}

}

class PingIp extends Thread{

public String ip; // IP

public PingIp(String ip){

thisip=ip;

}

public void run(){

try{

Process p= RuntimegetRuntime()exec ("ping "+ip+ " -w 300 -n 1");

InputStreamReader ir = new InputStreamReader(pgetInputStream());

LineNumberReader input = new LineNumberReader (ir);

//读取结果行

for (int i=1 ; i <7; i++)

inputreadLine();

String line= inputreadLine();

if (linelength() <17 || linesubstring(8,17)equals("timed out"))

pingput(ip,"false");

else

pingput(ip,"true");

//线程结束

threadCount -= 1;

}catch (IOException e){}

}

}

}

您好,Java计时器频率是指Java程序中计时器的频率,也就是每隔多长时间触发一次计时器。Java计时器频率是由程序员自己设定的,一般来说,可以设置任意的时间间隔,从毫秒到小时都可以。Java计时器频率的设置可以通过Timer类的schedule()方法来实现,其中可以设置计时器的时间间隔,以及计时器触发时要执行的任务。此外,Java计时器频率也可以通过TimerTask类的scheduleAtFixedRate()方法来实现,其中可以设置计时器的时间间隔,以及计时器触发时要执行的任务。

以上就是关于java语言怎么统计一个给定字符串中指定字符出现的频率(次数)全部的内容,包括:java语言怎么统计一个给定字符串中指定字符出现的频率(次数)、java 如何获得一个进程的内存使用情况,cpu运行的时间、如何用java实现,实时获取局域网内所有接入设备的IP地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10183268.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存