Java拆分一个字符串并将其中一个转换为double

时间:2016-04-01 03:41:08

标签: java string split double

这里只是一个简单的java问题...我想拆分一个字符串并获取一个特定的部分将其转换为双精度:

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>

using namespace std;

struct intNode {
   int data;
   intNode * Left;
   intNode * Right;
   int height;

   intNode(int input, intNode * iLeft= NULL, intNode * iRight = NULL) {
      data = input;
      Left = iLeft;
      Right = iRight;
      height = 0;
   }

};    

int getHeight(intNode* temp) {
   if (temp == NULL) 
       return 0;
   return temp->height;    
}

void setHeight(intNode * temp) 
{
    int hLeft = getHeight(temp->Left);
    int hRight = getHeight(temp->Right);          
    temp->height = 1 + max(hLeft, hRight); 
}

int getBalance(intNode * temp) {

   if (temp == NULL) {
      return 0;
   } else {
       return getHeight(temp->Left) - getHeight(temp->Right);
   }
}  


struct intTree {
    intNode * root;

    intTree();
    void addNode(int input);
    void addNode(int input, intNode *& root);
    void print();
    void print(intNode *input);

    intNode * balanceTree(intNode *& sub);
    intNode * rotateRight(intNode *& sub);
    intNode * rotateLeft(intNode *& sub);

}; 

 void intTree::print(intNode *input) {

    if (input != NULL) {
        print(input->Left);
        cout << input->data << endl;
        print(input->Right);
    }

}

void intTree::print() {
   print(root);
}

intNode * intTree::rotateRight(intNode *& subTree) {
   intNode * newRoot = subTree->Left;
   subTree->Left = newRoot->Right;   
   newRoot->Right = subTree;
   setHeight(subTree);    
   setHeight(newRoot);    

   return newRoot;
}

 intNode * intTree::rotateLeft(intNode *& subTree) {
   intNode * newRoot = subTree->Right;
   subTree->Right = newRoot->Left;   
   newRoot->Left = subTree;
   setHeight(subTree);    
   setHeight(newRoot);    

   return newRoot;
}

intNode* intTree::balanceTree(intNode *& subTree) {
   setHeight(subTree);

      if (getBalance(subTree) == 2 && getBalance(subTree->Right) < 0) {                     
         cout << "RL" << endl;
         subTree->Left = rotateLeft(subTree->Left);
         return rotateRight(subTree);

      } else if (getBalance(subTree) == 2) {                    // RR
        cout << "RR" << endl;
        return rotateRight(subTree);

      } else if (getBalance(subTree) == -2 && getBalance(subTree->Left) > 0) {  // LR
        cout << "LR" << endl;
        subTree->Right = rotateRight(subTree->Right);
        return rotateLeft(subTree);

      } else if (getBalance(subTree) == -2) {                   // LL
        cout << "LL" << endl;
        return rotateLeft(subTree);

      } else {
        return subTree;                                 // balanced
      }

}

intTree::intTree() {
   root = NULL;
}

void intTree::addNode(int input, intNode *& temp) {
   if (temp == NULL) {
       temp = new intNode(input);
   } else if (input < temp->data) {
       cout <<" added to the left" << endl;
       addNode(input,temp->Left);
   } else if (input > temp->data) {
       cout <<" added to the right" << endl;
       addNode(input, temp->Right);
   }

   temp = balanceTree(temp);

}

void intTree::addNode(int input) {
   addNode(input, root); 
}

void read() {
   string num;
   int balance, input;
   int i = 0;

   intTree * intBST = new intTree();       

   while (i != 10) {
      cout << "number?" << endl;
      cin >> input;


      intNode *tempInt= new intNode(input);
      intBST->addNode(input);

      i++; 
   }     

   cout << "Finished reading in files" << endl;

   while (true) {
      string userInput;
      cin >> userInput;    

      if (userInput == "Exit") {
         cout << "Goodbye!" << endl;
         return;
     }

     if (userInput == "Print") {
         intBST->print();
         return;
     }

  }
}


void main() {
  read();

  return 0;
}

最简单的方法是将13.50作为双倍。 我想把它们分成两个,首先是单词,然后是美元价值。使用.split(&#34; - &#34;);

谢谢大家。

2 个答案:

答案 0 :(得分:1)

Double.valueOf(name.split("\\$")[1])

答案 1 :(得分:1)

您可以使用正则表达式,编译Pattern并使用Matcher。像,

String name = "England vs Spain -- $13.50";
Pattern p = Pattern.compile("(.+)\\s*--\\s*\\$(.+)");
Matcher m = p.matcher(name);
if (m.matches()) {
    System.out.println("Words: " + m.group(1));
    System.out.printf("Amount: $%.2f%n", Double.parseDouble(m.group(2)));
}

输出

Words: England vs Spain 
Amount: $13.50