String切分字符串,例子32mg分为32和mg

本文详细介绍了如何解析字符串中的数字与非数字部分,并通过Java实现将其转换为指定格式,包括数量和单位的分离。重点阐述了字符串操作、异常处理及格式化输出的过程。
package com;

public class Test {

	public String t(String arg){
		int argLength=arg.length();
		String zhengshu="";
		String danwei="";
		for(int i =0;i<argLength;i++){
			String beforeArg="";
			beforeArg=arg.substring(i, i+1);
			try{
				zhengshu=zhengshu+Integer.parseInt(beforeArg);
			}catch(Exception e){
				danwei=danwei+beforeArg;
			}
		}
		String arg1=zhengshu+","+danwei;
		return arg1;
	}
	
	public static void main(String[] args) {
		Test t = new Test();
		String arg="32mg";
		String aa =t.t(arg);
		String aa1[] =aa.split(",");
		String shuliang=aa1[0];
		String danwei=aa1[1]; ;
		System.out.println(shuliang);
		System.out.println(danwei);
	}
}

 
#include <iostream> #include <string> using namespace std; const int MaxSize = 10; // 图中最多顶点个数 int visited[MaxSize] = { 0 }; // 全局访问数组,用于DFS/BFS template <class DataType> class MGraph { public: MGraph(DataType a[], int n, int e); // 构造函数 ~MGraph() {} void DFTraverse(int v); // 深度优先遍历 void BFTraverse(int v); // 广度优先遍历 void Dijkstra(int v); // 单源最短路径 void Floyd(); // 所有顶点间最短路径 private: DataType vertex[MaxSize]; // 顶点数组 int edge[MaxSize][MaxSize]; // 边矩阵(权值) int vertexNum, edgeNum; // 顶点数边数 // 辅助函数:在距离数组中找最小正值索引(用于Dijkstra) int Min(int r[], int n) { int index = 0, min = 1000; for (int i = 0; i < n; i++) { if (r[i] != 0 && r[i] < min) { min = r[i]; index = i; } } return index; } }; // 构造函数:输入顶点带权边 template <class DataType> MGraph<DataType>::MGraph(DataType a[], int n, int e) { vertexNum = n; edgeNum = e; for (int i = 0; i < vertexNum; i++) { vertex[i] = a[i]; } // 初始化邻接矩阵:自环为0,其余为1000(表示∞) for (int i = 0; i < vertexNum; i++) { for (int j = 0; j < vertexNum; j++) { if (i == j) edge[i][j] = 0; else edge[i][j] = 1000; } } // 输入每条边 for (int k = 0; k < edgeNum; k++) { int i, j, w; cout << "请输入边依附的两个顶点编号及权值(i j w): "; cin >> i >> j >> w; edge[i][j] = w; // 若是无向图,则启用下面这句 // edge[j][i] = w; } } // 深度优先遍历(DFS) template <class DataType> void MGraph<DataType>::DFTraverse(int v) { cout << vertex[v]; visited[v] = 1; for (int j = 0; j < vertexNum; j++) { if (edge[v][j] != 1000 && visited[j] == 0) { DFTraverse(j); } } } // 广度优先遍历(BFS) template <class DataType> void MGraph<DataType>::BFTraverse(int v) { int w, j, Q[MaxSize]; int front = -1, rear = -1; cout << vertex[v]; visited[v] = 1; Q[++rear] = v; while (front != rear) { w = Q[++front]; for (j = 0; j < vertexNum; j++) { if (edge[w][j] != 1000 && visited[j] == 0) { cout << vertex[j]; visited[j] = 1; Q[++rear] = j; } } } } // Dijkstra算法:求从源点v出发到其余各点的最短路径 template <class DataType> void MGraph<DataType>::Dijkstra(int v) { int dist[MaxSize]; string path[MaxSize]; // 初始化 for (int i = 0; i < vertexNum; i++) { dist[i] = edge[v][i]; if (dist[i] != 1000) { path[i] = vertex[v] + vertex[i]; // 字符串拼接 } else { path[i] = ""; } } for (int num = 1; num < vertexNum; num++) { int k = Min(dist, vertexNum); cout << path[k] << " : " << dist[k] << endl; // 更新其他距离 for (int i = 0; i < vertexNum; i++) { if (dist[i] > dist[k] + edge[k][i]) { dist[i] = dist[k] + edge[k][i]; path[i] = path[k] + vertex[i]; } } dist[k] = 0; // 标记已加入集合S } } // Floyd算法:所有顶点对之间的最短路径 template <class DataType> void MGraph<DataType>::Floyd() { int dist[MaxSize][MaxSize]; string path[MaxSize][MaxSize]; // 初始化 for (int i = 0; i < vertexNum; i++) { for (int j = 0; j < vertexNum; j++) { dist[i][j] = edge[i][j]; if (dist[i][j] != 1000 && i != j) { path[i][j] = vertex[i] + vertex[j]; } else { path[i][j] = ""; } } } // 三重循环更新 for (int k = 0; k < vertexNum; k++) { for (int i = 0; i < vertexNum; i++) { for (int j = 0; j < vertexNum; j++) { if (dist[i][k] + dist[k][j] < dist[i][j]) { dist[i][j] = dist[i][k] + dist[k][j]; path[i][j] = path[i][k] + path[k][j]; } } } } // 输出结果 for (int i = 0; i < vertexNum; i++) { for (int j = 0; j < vertexNum; j++) { if (i != j && !path[i][j].empty()) { cout << path[i][j] << " : " << dist[i][j] << "\t"; } } cout << endl; } } //邻接表类 ALGraph struct EdgeNode { int adjvex; EdgeNode* next; }; template <class DataType> struct VertexNode { DataType vertex; EdgeNode* firstEdge; }; template <class DataType> class ALGraph { public: ALGraph(DataType a[], int n, int e); ~ALGraph(); void DFTraverse(int v); void BFTraverse(int v); private: VertexNode<DataType> adjlist[MaxSize]; int vertexNum, edgeNum; }; // 构造函数 template <class DataType> ALGraph<DataType>::ALGraph(DataType a[], int n, int e) { int i, j, k; EdgeNode* s; vertexNum = n; edgeNum = e; for (i = 0; i < vertexNum; i++) { adjlist[i].vertex = a[i]; adjlist[i].firstEdge = nullptr; } for (k = 0; k < edgeNum; k++) { cout << "输入边所依附的两个顶点的编号:"; cin >> i >> j; s = new EdgeNode; s->adjvex = j; s->next = adjlist[i].firstEdge; adjlist[i].firstEdge = s; } } // 析构函数 template <class DataType> ALGraph<DataType>::~ALGraph() { EdgeNode* p, * q; for (int i = 0; i < vertexNum; i++) { p = q = adjlist[i].firstEdge; while (p != nullptr) { p = p->next; delete q; q = p; } } } // DFS(邻接表) template <class DataType> void ALGraph<DataType>::DFTraverse(int v) { cout << adjlist[v].vertex; visited[v] = 1; EdgeNode* p = adjlist[v].firstEdge; while (p != nullptr) { int j = p->adjvex; if (!visited[j]) DFTraverse(j); p = p->next; } } // BFS(邻接表) template <class DataType> void ALGraph<DataType>::BFTraverse(int v) { int w, j, Q[MaxSize]; int front = -1, rear = -1; EdgeNode* p; cout << adjlist[v].vertex; visited[v] = 1; Q[++rear] = v; while (front != rear) { w = Q[++front]; p = adjlist[w].firstEdge; while (p != nullptr) { j = p->adjvex; if (!visited[j]) { cout << adjlist[j].vertex; visited[j] = 1; Q[++rear] = j; } p = p->next; } } } int main() { int n, e; cout << "请输入顶点数边数: "; cin >> n >> e; string vertexNames[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" }; cout << "\n=== 使用邻接矩阵进行操作 ===" << endl; MGraph<string> mg(vertexNames, n, e); // DFS for (int i = 0; i < MaxSize; i++) visited[i] = 0; cout << "深度优先遍历序列是:"; mg.DFTraverse(0); cout << endl; // BFS for (int i = 0; i < MaxSize; i++) visited[i] = 0; cout << "广度优先遍历序列是:"; mg.BFTraverse(0); cout << endl; // Dijkstra cout << "\n从顶点0出发的最短路径:" << endl; mg.Dijkstra(0); // Floyd cout << "\n所有顶点对之间的最短路径:" << endl; mg.Floyd(); cout << "\n=== 使用邻接表进行遍历测试 ===" << endl; ALGraph<string> alg(vertexNames, n, e); for (int i = 0; i < MaxSize; i++) visited[i] = 0; cout << "邻接表-深度优先遍历:"; alg.DFTraverse(0); cout << endl; for (int i = 0; i < MaxSize; i++) visited[i] = 0; cout << "邻接表-广度优先遍历:"; alg.BFTraverse(0); cout << endl; return 0; } 完善该程序图8个顶点17条边对应关系:ab2 ac4 af7 ah8 bc6 bh4 bg3 cg4 cd6 dg3 de1 df3 ef2 eh2 eg5 fh1 gh7
最新发布
12-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值