Cấp bậc tác giả:

JAVA

Tách dãy số từ chuỗi cho trước

Được viết bởi webmaster ngày 11/12/2014 lúc 12:25 AM
Bài viết này sẽ giúp các bạn tách dãy số từ chuỗi
  • 0
  • 2008

Tách dãy số từ chuỗi cho trước


Bài viết này sẽ giúp các bạn tách dãy số từ chuỗi. Ví dụ với chuỗi
"-1.223 %^& fsf 0.234 56.65 fsf 9 f"
Chúng ta sẽ tách được ra các số:
-1.223
0.234
56.65
9
Ở đây mình thực hiện thành công trên c và java, các ngôn ngữ khác chắc cũng có cách ;). Nói thêm là cách làm có sử dụng đến regex, bạn nào chưa rõ có thể đọc thêm về nó.
Trong C: thực chất cách này là mình tham khảo và phát triển từ bài
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
// khong doc duoc str khi bat dau bang dau tru (-)
char* str= "-1.223 %^& fsf 0.234 56.65 fsf 9 f";
// khai bao, cap phat bo nho them s de cong them vao dau 1 ky tu
char* const s = (char*)malloc(sizeof(strlen(str))+1);
// cong them ky tu a
strcpy(s, "a");
strcpy(s + strlen(s), str);
printf("%s\n",s);
// tach lay cac so
int total_n = 0;
int n;
float i; // cac so can tach
printf("\nday cac so\n");
while (1 == sscanf(s + total_n, "%*[^0123456789-]%f%n", &i, &n))
{
total_n += n;
printf("%f\n", i);
}
return 0;
}
Trong Java: Cách dễ dàng nhất là biến tẩt cả ký tự không phải số (ngoại trừ dấu âm, dấu chấm) rồi tách thành các phần tử như dưới đây:
public class ScanArrayNumFromString {
public static void main(String[] args) {
// chuoi ban dau
String str = "-1.223 %^& fsf 0.234 56.65 fsf 9 f";
/**
* thay the toan bo nhung ky tu khong phai so, khong phai dau am, khong
* phai dau cham bang dau phay
*/
str = str.replaceAll("[^0-9,-\\.]", ",");
/** cat thanh cac phan tu thong qua dau phay */
String[] item = str.split(",");
// duyet cac phan tu, neu la so thi in ra
for (int i = 0; i < item.length; i++) {
try {
Double.parseDouble(item[i]);
System.out.println(item[i]);
} catch (NumberFormatException e) {
}
}
}
}

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML